Я пытаюсь выполнять простые вызовы REST на сервере Sharepoint 2010, который использует шифрование SSL (https), а также аутентификацию NTLM. Когда сервер настроен так, чтобы не требовать SSL (просто для тестирования, серверу потребуется SSL в рабочей среде), моя проверка подлинности NTLM и последующие вызовы REST работают нормально с использованием HttpClient.Однако, когда SSL включен, проверка подлинности больше не работает.
Вот код для обработки SSL (настроен на прием всех сертификатов):
SSLContext sslContext = SSLContext.getInstance("TLS");
// set up a TrustManager that trusts everything
sslContext.init(null, new TrustManager[] { new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs,
String authType) { }
public void checkServerTrusted(X509Certificate[] certs,
String authType) { }
} }, new SecureRandom());
SSLSocketFactory sf = new SSLSocketFactory(sslContext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
Scheme httpsScheme = new Scheme("https", 443, sf);
SchemeRegistry schemeRegistry = new SchemeRegistry();
schemeRegistry.register(httpsScheme);
ClientConnectionManager cm = new SingleClientConnManager(schemeRegistry);
Далее следует код для выполнения NTML и вызова HTTP GET:
HttpParams params = new BasicHttpParams();
DefaultHttpClient httpclient = new DefaultHttpClient(cm, params);
// Set up the NTLM credentials
NTCredentials creds = new NTCredentials(USERNAME, PASSWORD, MACHINE, DOMAIN);
httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);
// Setup the HTTP GET and execute it
HttpHost target = new HttpHost(HOSTNAME, 443, "https");
HttpContext localContext = new BasicHttpContext();
HttpGet httpget = new HttpGet("/site/_vti_bin/ListData.svc/TestList");
HttpResponse response1 = httpclient.execute(target, httpget, localContext);
Ответ, который я всегда получаю:
HTTP/1.1 400 Bad Request
The server encountered an error processing the request. See server logs for more details.
Обратите внимание, что я Я использовал FireFox Poster и CURL, чтобы сделать то же самое, что я пытаюсь сделать здесь, программно, и все работает нормально. Таким образом, сервер настроен правильно.
Спасибо за ваше время!