HTTP Mutual Authentication Code работал в Apache HTTPClient 4.0.1, но не работает в 4.1 - PullRequest
1 голос
/ 08 марта 2011

Я выполняю взаимную аутентификацию клиента на сервере.

У меня есть сервер с самозаверяющим сертификатом.Я создал хранилище ключей Java (trustStore), которое включает этот сервер в хранилище доверенных сертификатов.У меня есть хранилище ключей, которое включает в себя мой сертификат и закрытый ключ.Мой сертификат был подписан сервером (тот же, который сам подписал и находится в моем хранилище доверенных сертификатов).Я использовал API для создания SSLSocketFactory, которая регистрирует мое хранилище ключей и хранилище доверенных сертификатов (аналогично этому сообщению Взаимная аутентификация с сертификатами x509 с использованием HttpClient 4.0.1 ).

Используя Apache HTTPClient 4.0.1, все заработало.Я обновил до 4.1 и кроме того, чтобы переупорядочить аргументы в конструкторе Scheme, код такой же.Однако теперь я получаю исключение javax.net.ssl.SSLPeerUnverifiedException: одноранговый узел не аутентифицирован

Помогите, пожалуйста?

Я вижу, что в 4.1 есть org.apache.http.conn.ssl.TrustSelfSignedStrategy, но не нашел примеров его использования.Я даже не уверен, что хотел бы использовать это.Я должен был сделать этот выбор пользователем, что, казалось бы, было бы лучше, если бы они просто дали мне свой сертификат сервера, чтобы добавить его в мое хранилище доверия.(http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ssl/TrustSelfSignedStrategy.html)

Ниже приведен код:

    String doGet(URI uri, String acceptType) throws Exception 
    { 
            // To be replaced by common module. 
            String result = null; 
            DefaultHttpClient httpclient = new DefaultHttpClient(); 
            try 
            { 
                    SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, String.valueOf(keyStorePassword), trustStore); 
                    Scheme sch = new Scheme("https", 443, socketFactory); 
                    httpclient.getConnectionManager().getSchemeRegistry().register(sch); 

                    HttpGet httpget = new HttpGet(uri.toASCIIString()); 
                    httpget.addHeader("Accept", acceptType); 
                    HttpResponse response = httpclient.execute(httpget); 
                    HttpEntity entity = response.getEntity(); 

                    result = IOUtils.getContent(entity.getContent()); 
            } finally 
            { 
                    httpclient.getConnectionManager().shutdown(); 
            } 

            return result; 
    } 

Ниже приведено исключение, которое я получаю в 4.1:

Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
    at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352) 
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:390) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121) 
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:562) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)

1 Ответ

1 голос
/ 10 марта 2011

Я разместил это в списке пользователей HTTPClient, и после взаимодействия с разработчиками обнаружена ошибка в 4.1, которая будет исправлена ​​4.1.1.

http://old.nabble.com/SSL-Mutual-Authentication-Code-worked-in-4.0.1-but-fails-in-4.1-tt31092864.html

...