【问题标题】:javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated issuejavax.net.ssl.SSLPeerUnverifiedException:对等体未通过身份验证的问题
【发布时间】:2016-06-14 01:18:42
【问题描述】:

我正在使用HttpClient-4.2.1 并且已经在服务器上添加了证书,但仍然出现以下错误。

我已阅读现有问题,说要添加 TrustManager (X509TrustManager),但根据我的想法,这不是解决方案。如果我错了,请纠正我。

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)

at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)

at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)

at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)

at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)

at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)

at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)

at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)

【问题讨论】:

    标签: java apache-httpclient-4.x


    【解决方案1】:

    您可以使用此代码。希望它能解决您的问题。

    import javax.net.ssl.SSLContext;
    import javax.net.ssl.TrustManager;
    import javax.net.ssl.X509TrustManager;
    import java.security.SecureRandom;
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
    ......
    private static HttpClient getHttpClient() {
    
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL");
    
            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());
    
            SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(sslContext,SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
    
    
    
            HttpClient httpClient = HttpClientBuilder.create().setSSLSocketFactory(socketFactory).build();
    
            return httpClient;
    
        } catch (Exception e) {
            e.printStackTrace();
            return HttpClientBuilder.create().build();
        }
    }
    

    不再抛出异常,当证书过期时,浏览器会发出证书过期警告并让用户确认。

    资源链接:

    1. Exception : javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

    【讨论】:

    • 我看不出这样的答案有什么用。从等式中删除验证“解决”了眼前的问题,但从长远来看会引发一大堆其他问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 2013-03-28
    相关资源
    最近更新 更多