HttpClient, использующий как шифрование SSL, так и аутентификацию NTLM, не работает

Я пытаюсь выполнять простые вызовы 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, чтобы сделать то же самое, что я пытаюсь сделать здесь, программно, и все работает нормально. Таким образом, сервер настроен правильно.

Спасибо за ваше время!

5
задан Edward Thomson 15 March 2012 в 19:30
поделиться