Ich habe javax.net.ssl.SSLPeerUnverifiedException: peer nicht authentifizierten auf meinem JUnit-test

Erstelle ich einige unit-tests für Anwendungen, die eine REST-API. Wenn ich versuche zu senden, ein HttpPost-request an die server-URL (https://some.server.com), ich habe diese:

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.createSocket(SSLSocketFactory.java:399)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:143)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)

Dem server verifiziert HTTPS-Zertifikat. Auch, wenn ich auf Produktion, es funktioniert gut. Also ich denke, es hat zu tun mit JUnit und/oder meinem lokalen computer.

Ich bin auch mit einem HttpClient erstellt mit diesem:

public static class WebClientDevWrapper {
    public static HttpClient wrapClient(HttpClient base) {
        try {
            SSLContext ctx = SSLContext.getInstance("TLS");
            X509TrustManager tm = new X509TrustManager() {

                public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
                }

                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }
            };
            ctx.init(null, new TrustManager[]{tm}, null);
            SSLSocketFactory ssf = new SSLSocketFactory(ctx);
            ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
            ClientConnectionManager ccm = base.getConnectionManager();
            SchemeRegistry sr = ccm.getSchemeRegistry();
            sr.register(new Scheme("https", ssf, 443));
            return new DefaultHttpClient(ccm, base.getParams());
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
}

AFAIK, wenn ich einen HTTPClient mit dem code oben, sollte es vermeiden SSLPeerUnverifiedException, aber es scheint, dass es nicht funktioniert.

Also, wie kann ich dieses problem lösen? Ich habe versucht, mehr Möglichkeiten zu schaffen HttpClients, die sich nicht beschweren über SSL-certs, aber hat nichts geklappt so weit.

InformationsquelleAutor Cristian | 2011-08-09
Schreibe einen Kommentar