Retrofit 2.0 实现Https传输

证书获取

1. 从网页获取

在chrome浏览器打开服务地址,Ctrl+Shift+I打开开发者工具,选择Security->View certificate下载证书;

image.png

2. 找网站开发者(后台)要☺

保存证书文件到assets目录下

image.png

设置证书,并信任所有证书

        OkHttpClient.Builder builder = new OkHttpClient.Builder();
        try {
            //设置证书
            setCertificates(builder, Utils.getApp().getAssets().open(BuildConfig.HTTPS_FILENAME));
            //信任所有证书
            builder.hostnameVerifier((hostname, session) -> true);
        } catch (Exception e) {
            e.printStackTrace();
        }

获取证书代码

    * 通过okhttpClient来设置证书
     *
     * @param clientBuilder OKhttpClient.builder
     * @param certificates  读取证书的InputStream
     */
    private static void setCertificates(OkHttpClient.Builder clientBuilder, InputStream... certificates) {
        try {
            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
            keyStore.load(null);
            int index = 0;
            for (InputStream certificate : certificates) {
                String certificateAlias = Integer.toString(index++);
                keyStore.setCertificateEntry(certificateAlias, certificateFactory
                        .generateCertificate(certificate));
                try {
                    if (certificate != null)
                        certificate.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
                    TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(keyStore);
            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
            if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
                throw new IllegalStateException("Unexpected default trust managers:"
                        + Arrays.toString(trustManagers));
            }
            X509TrustManager trustManager = (X509TrustManager) trustManagers[0];
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            clientBuilder.sslSocketFactory(sslSocketFactory, trustManager);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 记得高考那一年,每天比写日记,因为那个时候很孤独,静得下心来,仿佛只有写日记才能把想说的话都说出来,自从毕业...
    阿爆爆阅读 213评论 0 0
  • 暑假差不多一大半过去了,这边的好多打工者陆陆续续把孩子被送回老家了。今天是周一,我早早起床准备上班,走出家...
    萧豆哥阅读 376评论 0 4
  • 许久以来第一次早睡,刚刚被蚊子咬醒。起身开风扇吹着,找到蚊子,前后消灭了两只,洗完手,倒了一杯热水,暂时不愿...
    我要眉间的温柔阅读 169评论 0 0
  • 16年11月前,我是整天和各种数据打交道的数据人员,16年11月后,我是站在前线冲锋陷阵的士兵。从事了7年的行业说...
    蛙蛙123阅读 400评论 2 1
  • 焦点讲师四期班 翟冲【原创】分享第353天 2017.12.16 天冷了,起风了。窗台上的小盆栽不知是否禁得...
    春暖花开zc阅读 974评论 1 1