美文网首页
retrofit 添加SSL证书校验

retrofit 添加SSL证书校验

作者: xiaotimel | 来源:发表于2020-08-22 15:24 被阅读0次

使用https时添加证书防止捉包

 public static class SSLParams {
        public SSLSocketFactory sSLSocketFactory;
        public X509TrustManager trustManager;
    }

读取ssl证书

 /**
     * 获去信任自签证书的trustManager
     *
     * @return 信任自签证书的trustManager
     * @throws GeneralSecurityException
     */
    public static HttpsUtils.SSLParams getSslSocketFactory(List<InputStream> certificates) {
        if (certificates == null || certificates.size() <= 0) {
            return null;
        }
        try {
            HttpsUtils.SSLParams sslParams = new HttpsUtils.SSLParams();
            //创建证书工厂
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null);

            int index = 0;
            //将所有证书放入证书放入keystore中
            for (InputStream certificate : certificates) {
                String certificateAlias = Integer.toString(index++);
                Certificate cer = certificateFactory.generateCertificate(certificate);
                keyStore.setCertificateEntry(certificateAlias, cer);
                try {

                    if (certificate != null) {
                        certificate.close();
                    }

                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(keyStore);

            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            SSLContext sslContext = SSLContext.getInstance("TLS");
            final List<X509TrustManager> x509trustManagers = new ArrayList<X509TrustManager>();
            for (TrustManager tm : trustManagers) {
                if (tm instanceof X509TrustManager) {
                    x509trustManagers.add((X509TrustManager) tm);
                }
            }

            X509TrustManager trustManager = new X509TrustManager() {

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

                }

                @Override
                public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException, CertificateException {
                    for (X509TrustManager tm : x509trustManagers) {
                        tm.checkServerTrusted(x509Certificates, s);
                    }
                }

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

            sslContext.init(null, new TrustManager[]{trustManager}, null);
            sslParams.sSLSocketFactory = sslContext.getSocketFactory();
            sslParams.trustManager = trustManager;
            return sslParams;
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

添加到retrofit中方

 private OkHttpClient mOkHttpClient;
 private OkHttpClient.Builder mBuilder;

private void init(){
mBuilder = new OkHttpClient.Builder();
mOkHttpClient = mBuilder.build();
mBuilder.sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager);
mRetrofit = new Retrofit.Builder()
                .client(mOkHttpClient)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .baseUrl(baseUrl)
                .build();
}

相关文章

  • retrofit 添加SSL证书校验

    使用https时添加证书防止捉包 读取ssl证书 添加到retrofit中方

  • android webview ssl校验

    防止webview捉包,添加ssl证书校验。网上有很多的是在onReceivedSslError校验证书,其实这个...

  • Spring Boot前后端分离项目配置SSL证书——HTTPS

    网站添加免费SSL证书——HTTPS协议 一、SSL证书的下载 Spring Boot前后端分离项目配置SSL证书...

  • SSL证书校验

    今天在检查安卓端一个https图片不能显示的问题,打印log,发现证书验证失败,拿到浏览器发现图片可以访问,iOS...

  • SSL证书生成过程

    SSL证书结构 结构图 SSL证书包括两部分,证书信息和签名信息,签名信息在证书合法性形校验使用。 根证书生成 根...

  • iOS通过AFNetworking实现HTTPS双向认证

    1. 添加认证证书 2. 校验证书

  • App SSL证书校验

    使用HTTPS已经是个大的趋势了,未来肯定也是全站HTTPS。Apple也规定所有开发者在2017年1月1日前,要...

  • SSL证书校验失败……

    昨天一个晚上,我的简书页面都显示“SSL证书校验失败……” 快到晚上十点半左右,我放弃了昨天的文字记录,洗洗上床睡...

  • Nginx下配置SSL证书

    一、申请证书 需要免费申请SSL证书的同学可以参考这篇文章《八大免费SSL证书:给你的网站免费添加HTTPS加密》...

  • 一天一道面试题—— HTTPS

    HTTPS = HTTP + SSL + 完整性校验 证书验证 CA生成证书的指纹 将持有者的公钥、用途、颁发者、...

网友评论

      本文标题:retrofit 添加SSL证书校验

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