AsyncHttp android-async-http Trust anchor for certification path not found.异常解决办法

异常详情:
javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

先前尝试解决:
尝试了网上几种方式,在Application里面加全局忽略校验的,都不行,还是会报这个证书错误,可能对于别的网络框架有用,但是对于AsyncHttp没用。

前言
因为服务器证书到期,运维更新了证书,结果出现了上述问题。

问题原因:
由于项目的https.bks证书不是正规的CA签发的证书,而是二级代理商等签发的证书,验证不通过造成的!

解决方案
通过排查项目代码,发现之前没有做证书信赖验证。这里先提供一个能解决问题但是不是最佳做法的方案,方便大家快速处理问题。

项目使用了android-async-http
通过对async-http的AsyncHttpClient 忽略https的证书校验(其实并不推荐,这样就失去了https的安全特性了)

        AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
        asyncHttpClient.addHeader("Accept-Language", LocaleUtils.getLanguage());
        asyncHttpClient.addHeader("Accept-Encoding", "gzip");
        asyncHttpClient.setTimeout(TIME_OUT_MILLS);
        asyncHttpClient.setMaxRetriesAndTimeout(RETRIES, RETRY_INTERVAL);
        try {
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, new TrustManager[] {trustManagers}, new SecureRandom());
            SSLSocketFactory sslSocketFactory = new SSLSocketFactory(sslContext);
            asyncHttpClient.setSSLSocketFactory(sslSocketFactory);
        } catch (Exception e) {
            e.printStackTrace();
        }
    /**
     * 信任管理器
     */
    private static TrustManager trustManagers = new 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];
        }
    };

最后结语:
这个方案并不推荐,只是临时解决了https证书校验不通过的问题。推荐解决方案:运维换正规的https证书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值