javax.net.ssl.SSLHandshakeException: Chain validation failed 异常

当CA证书到期时,可以通过更新证书或跳过HTTPS验证机制来解决问题。文中提供了自定义TrustManager和HostnameVerifier的代码示例,用于创建不进行服务器验证的SSLSocketFactory,以允许OkHttpClient忽略证书错误。

原因:ca证书到期了

解决:1.更新ca证书  2.跳过https验证机制

下面是跳过https验证的方法:

    // ---------跳过https验证机制---------
    //自定义SS验证相关类
    private static class TrustAllCerts implements X509TrustManager {
        @Override
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
        }

        @Override
        public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }

    private static class TrustAllHostnameVerifier implements HostnameVerifier {
        @Override
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    }

    private static SSLSocketFactory createSSLSocketFactory() {
        SSLSocketFactory ssfFactory = null;
        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{new TrustAllCerts()}, new SecureRandom());
            ssfFactory = sc.getSocketFactory();
        } catch (Exception e) {
        }
        return ssfFactory;
    }

    new OkHttpClient.Builder()
    .sslSocketFactory(createSSLSocketFactory(), new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

                    }

                    @Override
                    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {

                    }

                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                })
     .hostnameVerifier(new TrustAllHostnameVerifier())
     .build();

当出现"javax.net.ssl.SSLHandshakeException: Chain validation failed"异常时,表示在SSL握手过程中,证书链验证失败。这个异常通常发生在TLS/SSL连接过程中,当客户端无法验证服务器端的证书链时会抛出该异常。证书链验证失败可能有以下几个原因: 1. 证书过期或无效: 当证书的有效期已过或证书无效时,会导致验证失败。这可能是由于证书颁发机构(CA)的信任链中的某个证书过期、被吊销或者被篡改。 2. 证书不匹配: 当服务器提供的证书与预期的证书不匹配时,验证也会失败。这可能是由于服务器使用了错误的证书或者证书不属于该服务器。 3. 证书链不完整: 当服务器只提供了部分证书链,没有提供完整的证书链时,验证也会失败。证书链是由服务器证书、中间证书和根证书组成的,缺少其中任何一个证书都会导致验证失败。 解决此问题的方法包括: 1. 检查证书是否过期或无效: 需要确保服务器端的证书链中的每个证书都是有效的,并且没有过期或被吊销。 2. 检查证书是否正确匹配: 确保服务器端提供的证书与预期的证书匹配。可以检查证书的主体名称、主体备用名称等信息来验证是否正确匹配。 3. 检查证书链是否完整: 确保服务器端提供了完整的证书链,包括服务器证书、中间证书和根证书。如果缺少任何一个证书,都会导致验证失败。 如果以上方法无法解决问题,可以尝试更新Java安全性策略文件,或者检查网络连接是否正常。 需要注意的是,在部署TLS/SSL连接时,确保服务器端和客户端的证书配置正确,并且证书链能够被正确验证,以确保安全的通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [javax.net.ssl.SSLHandshakeException: Chain validation failed](https://blog.csdn.net/u014084081/article/details/128002198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure的一个解决方案-附件资源](https://download.csdn.net/download/weixin_42200791/15591143)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值