httpclient https SSLPeerUnverifiedException 异常

发布于 2022-09-02 00:55:41 字数 2627 浏览 11 评论 0

如下代码,为什么还会发生这个异常javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

   private final static int SO_TIME_OUT = 10000; // 10s
    private final static int CON_TIME_OUT = 10000; // 10s
    private static HttpClient httpClient = null;
    static {
        PoolingClientConnectionManager connManager = new PoolingClientConnectionManager();
        connManager.setMaxTotal(20);
        connManager.setDefaultMaxPerRoute(2);
        httpClient = new DefaultHttpClient(connManager);
        HttpParams httpParams = httpClient.getParams();
        /* 从连接池中取连接的超时时间 */
      //  HttpConnectionParams.setLinger(httpParams, 10000);
        HttpConnectionParams.setStaleCheckingEnabled(httpParams, true);
        HttpConnectionParams.setConnectionTimeout(httpParams, CON_TIME_OUT);
        HttpConnectionParams.setSoTimeout(httpParams, SO_TIME_OUT);

        /* ssl 配置 */
        TrustManager easyTrustManager = new X509TrustManager() {
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
            
            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                logger.info(authType);
            }
            
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }
        };
        SSLContext sslcontext = null;
        try {
            sslcontext = SSLContext.getInstance("TLS");
            sslcontext.init(null, new TrustManager[] {easyTrustManager}, new SecureRandom());
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        
        SSLSocketFactory sf = new SSLSocketFactory(sslcontext, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        Scheme schs = new Scheme("https", 443, sf);
        httpClient.getConnectionManager().getSchemeRegistry().register(schs);
        
        /*monitor thread*/
        new Thread(){
            public void run(){
                while(true){
                    ThreadUtils.quietlySleep(2000L);
                    httpClient.getConnectionManager().closeExpiredConnections();
                    httpClient.getConnectionManager().closeIdleConnections(10, TimeUnit.SECONDS);
                }
            }
        }.start();
    }

google 结果说自定义TrustManager,可以避免这个异常,我的程序还是会遇到这个异常,而且遇到后就无法恢复,一直报这个异常

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文