解决Android7.0无法抓包的问题

2018-05-02  本文已影响68人  张大川大川

问题

连上代理之后,装上代理的证书。然后7.0手机还是无法抓包。问题是因为7.0的系统,app内不再默认信任用户的证书了。

一般解决方案

app配置信任用户证书。

//mainifest中配置
<application
        android:networkSecurityConfig="@xml/network_security_config"
        ...
//新建xml/network_sercurity_config文件
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="user"/>
        </trust-anchors>
    </base-config>
</network-security-config>

配置的具体含义,可以查看:
https://developer.android.google.cn/training/articles/security-config?hl=zh-cn#trust-anchors

okhttp的另外一种解决方案

让okhttp的请求信任自定义的证书(或信任所有)

//调用方
    OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
            .sslSocketFactory(OkhttpSslUtils.createSSLSocketFactory(), new OkhttpSslUtils.TrustAllManager())
            .build();

//工具类
public class OkhttpSslUtils {

    public static SSLSocketFactory createSSLSocketFactory() {

        SSLSocketFactory sSLSocketFactory = null;

        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{new TrustAllManager()},
                    new SecureRandom());
            sSLSocketFactory = sc.getSocketFactory();
        } catch (Exception e) {
        }

        return sSLSocketFactory;
    }

    public static class TrustAllManager implements 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];
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读