美文网首页
Android 设置网络请求信任证书

Android 设置网络请求信任证书

作者: 雁过留声_泪落无痕 | 来源:发表于2021-10-09 17:57 被阅读0次
    1. OkHttpClient 信任证书
    public static OkHttpClient getOkHttpClient() {
        OkHttpClient.Builder builder = new OkHttpClient.Builder();
    
        X509TrustManager trustManager = null;
        SSLSocketFactory sslSocketFactory = null;
    
        try {
            trustManager = new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
    
                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            };
    
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, new TrustManager[]{trustManager}, null);
            sslSocketFactory = sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
    
        if (null != sslSocketFactory) {
            builder.sslSocketFactory(sslSocketFactory, trustManager);
            builder.hostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });
        }
    
        builder.connectTimeout(30L, TimeUnit.SECONDS)
                .readTimeout(30L, TimeUnit.SECONDS)
                .writeTimeout(30L, TimeUnit.SECONDS)
                .connectionPool(new ConnectionPool(8, 15, TimeUnit.SECONDS));
                
        return builder.build();
    }
    
    1. Glide 信任证书,也是基于 OkHttpClient,这里把网络请求委托给了 OkHttp 来执行。(由于 Glide 默认是采用的 HttpURLConnection 来进行网络请求,所以也可以直接采用下面的方案3
    def glide_version = '4.11.0'
    // Glide
    annotationProcessor "com.github.bumptech.glide:compiler:$glide_version"
    implementation "com.github.bumptech.glide:okhttp3-integration:$glide_version"
    implementation "com.github.bumptech.glide:glide:$glide_version"
    
    @GlideModule
    public class OkHttpAppGlideModule extends AppGlideModule {
    
        @Override
        public boolean isManifestParsingEnabled() {
            return false;
        }
    
        @Override
        public void registerComponents(@NonNull Context context,
                                       @NonNull Glide glide,
                                       @NonNull Registry registry
        ) {
            OkHttpClient client = Global.getOkHttpClient(false);
            registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(client));
        }
    }
    
    1. 所有请求都信任证书,用于除 OkHttpClient 之外的地方,用到 OkHttpClient 的地方还是要单独设置
    private void initSSL() {
        X509TrustManager trustManager;
        SSLSocketFactory sslSocketFactory = null;
    
        try {
            trustManager = new X509TrustManager() {
                public X509Certificate[] getAcceptedIssuers() {
                    return new X509Certificate[0];
                }
    
                @Override
                public void checkClientTrusted(X509Certificate[] certs, String authType) {
                }
    
                @Override
                public void checkServerTrusted(X509Certificate[] certs, String authType) {
                }
            };
    
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, new TrustManager[]{trustManager}, null);
            sslSocketFactory = sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
    
        // 设置所有请求都信任证书
        if (null != sslSocketFactory) {
            HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
            HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            });
        }
    }
    

    相关文章

      网友评论

          本文标题:Android 设置网络请求信任证书

          本文链接:https://www.haomeiwen.com/subject/jqoqoltx.html