HTTP-SSL Mutual Authentication Code war in der Apache-HTTPClient 4.0.1 scheitert in 4.1

Ich bin ausführen der gegenseitigen Authentifizierung für einen client an einen server.

Ich habe einen server mit einem selbst signierten Zertifikat. Ich habe eine java-key-store (trustStore), die beinhaltet, dass die server in den trust store. Ich habe einen Schlüsselspeicher, der auch mein Zertifikat und den privaten Schlüssel. Mein Zertifikat unterzeichnet wurde, durch den server (die gleiche, die selbst-signiert ist und in meinem truststore). Ich habe mit der API erstellen Sie eine SSLSocketFactory, die registriert, meine keystore-und truststore (ähnlich wie in diesem post Die gegenseitige Authentifizierung mit x509-Zertifikaten mit HttpClient 4.0.1).

Apache HTTPClient 4.0.1 alles funktioniert. Ich habe ein Upgrade auf 4.1 und andere, als dass die Reihenfolge der Argumente in der Schema-Konstruktor der code ist der gleiche. Aber jetzt bekomme ich eine javax.net.ssl.SSLPeerUnverifiedException: peer nicht authentifiziert

Helfen, bitte?

Ich sehe, es ist ein org.apache.http.conn.ssl.TrustSelfSignedStrategy in 4.1 aber habe nicht gefunden keine Beispiele, wie es zu benutzen. Ich bin mir auch nicht sicher, dass ich es verwenden möchten. Ich würde machen, dass ein Benutzer die Wahl, die scheint, dass es wäre besser für Sie, geben Sie mir nur Ihre server-Zertifikat hinzufügen, um mein Vertrauen zu speichern. (http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/conn/ssl/TrustSelfSignedStrategy.html)

Unten ist der code:

    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; 
    } 

Unten ist die exception die ich bekomme, die in 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)

InformationsquelleAutor user649020 | 2011-03-07

Schreibe einen Kommentar