Android 10及以上0khttp跳过SSL证书校验Unable to extract the trust manager javax.net.ssl.SSLHandshakeException:

参考一:Unable to extract the trust manager on Android10Platform_CHZKAL的博客-CSDN博客无法在android10平台上提取信任管理器,sslSocketFactory是class com.android.org.conscrypt.OpenSSLSocketFactoryImpl。记录一下填坑内容。服务器测试接口是http的,不是https,之前一直拿的8.0的手机调试一直好好的,今天换成android 10的手机测试发现请求服务器的时候奔溃了。,网上这个问题比较少嘞,在此记录一下。有大佬说这是okhttp的问题,解决方案是X509TrustManager改成X509Exte.https://blog.csdn.net/CHZKAL/article/details/106250966?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

 参考二:

Unable to extract the trust manager on Android10Platform 完美解决_hhbbeijing的专栏-CSDN博客Unable to extract the trust manager on Android10Platform网上有大致有两种解决方案,但都不靠谱。产生这个异常的根本原因是:builder.sslSocketFactory(sslContext.getSocketFactory());这个方式已经过时了,需要新的方式,如下:final X509TrustManager trustManager = new X509TrustManager() { @Override .https://blog.csdn.net/hhbbeijing/article/details/112007864?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_linkAndroid10以前跳过SSL证书是

builder.sslSocketFactory(sslContext.getSocketFactory());

Android10以后:

final X509TrustManager trustManager = 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];
    }
};
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new X509TrustManager[]{trustManager}, new SecureRandom());

OkHttpClient.Builder builder = new OkHttpClient().newBuilder()
        .connectTimeout(15, TimeUnit.SECONDS)
        .readTimeout(15,TimeUnit.SECONDS)
        .addInterceptor(logInterceptor)
        .sslSocketFactory(sslContext.getSocketFactory(),trustManager)
        .hostnameVerifier(new HostnameVerifier() {

            @Override
            public boolean verify(String hostname, SSLSession session) {

                return true;
            }
        });
 

猜你喜欢

转载自blog.csdn.net/qq_33209777/article/details/121405498