Okhttp3如何绕过Https

  1. 创建一个SSLSocketClient公共类
package com.hibox.utils;

import javax.net.ssl.*;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * Everyday is another day, keep going.
 * Created by Ramo
 * email:   [email protected]
 * date:    2019/06/19 11:08
 * desc:
 */
public class SSLSocketClient {

    public static SSLSocketFactory getSocketFactory(TrustManager manager) {
        SSLSocketFactory socketFactory = null;
        try {
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, new TrustManager[]{manager}, new SecureRandom());
            socketFactory = sslContext.getSocketFactory();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (KeyManagementException e) {
            e.printStackTrace();
        }
        return socketFactory;
    }

    public static X509TrustManager getX509TrustManager() {
        return 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];
            }
        };
    }

    public static HostnameVerifier getHostnameVerifier() {
        HostnameVerifier hostnameVerifier = new HostnameVerifier() {
            @Override
            public boolean verify(String s, SSLSession sslSession) {
                return true;
            }
        };
        return hostnameVerifier;
    }
}


复制代码
  1. 配置okhttp 在创建okhttpClient的时候添加两个拦截器
X509TrustManager manager = SSLSocketClient.getX509TrustManager();

OkHttpClient.Builder builder = new OkHttpClient.Builder();
builder.sslSocketFactory(SSLSocketClient.getSSLSocketFactory(manager), manager);
builder.hostnameVerifier(SSLSocketClient.getHostnameVerifier());

复制代码

转载于:https://juejin.im/post/5d09a1c3e51d455071250b22

猜你喜欢

转载自blog.csdn.net/weixin_34245082/article/details/93170260
今日推荐