欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android OkHttp信任所有证书

程序员文章站 2022-07-10 15:24:08
...

一、创建OkHttpClient

mOkHttpClient = new OkHttpClient.Builder()
        .retryOnConnectionFailure(false)//允许失败重试
        .readTimeout(TIMEOUT, TimeUnit.SECONDS)//设置读取超时时间
        .writeTimeout(TIMEOUT, TimeUnit.SECONDS)//设置写的超时时间
        .connectTimeout(TIMEOUT, TimeUnit.SECONDS)//设置连接超时时间
        .pingInterval(PING_TIME, TimeUnit.SECONDS)//心跳
        .certificatePinner(CertificatePinner.DEFAULT)
        .hostnameVerifier(SSLSocketClient.getHostnameVerifier())//配置
        .sslSocketFactory(SSLSocketClient.getSSLSocketFactory(),
         SSLSocketClient.getX509TrustManager())
        //设置cookie,后台需要如果不设置,连接不上
        .cookieJar(new CookieJarImpl(PersistentCookieStore.getInstance()))
        .addInterceptor(new UserAgentInterceptor())
        .build();

二、SSLSocketClient.class

public class SSLSocketClient {

    //获取这个SSLSocketFactory
    public static SSLSocketFactory getSSLSocketFactory() {
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, getTrustManager(), new SecureRandom());
            return sslContext.getSocketFactory();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    //获取TrustManager
    private static TrustManager[] getTrustManager() {
        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] chain, String authType) {
                    }

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

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

    //获取HostnameVerifier
    public static HostnameVerifier getHostnameVerifier() {
        HostnameVerifier hostnameVerifier = (s, sslSession) -> true;
        return hostnameVerifier;
    }

    public static X509TrustManager getX509TrustManager() {
        X509TrustManager x509TrustManager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {

            }

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

            }

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