[toc]java
android7.0以上的手机https抓包失败(安装了https证书也不行)android
android7.0+的版本新增了证书验证(系统证书)web
前提:在手机端和电脑端都必须安装https的安全证书
配置:打测试包时,项目设置默认信任全部证书(系统+用户)
1.在工程res-xml目录中建立一个名为 network_security_config.xml的文件,文件内容以下:安全
<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" overridePins="true" /> <certificates src="user" overridePins="true" /> </trust-anchors> </base-config> </network-security-config>
2.在AndroidManifest里的<application>标签中,添加以下代码:网络
android:networkSecurityConfig="@xml/network_security_config"
从新打包项目,而后抓包,便可成功。app
上面能够解决android原生抓包问题,但在android7.0以上的手机,开着网络代理访问不了webview,若要抓包webview,
须要在webview的WebViewClient中,将一行代码给注释掉:ide
super.onReceivedSslError(view, handler, error)
这样是为了忽略掉SSL证书错误,由于开启代理后网络会变得不安全,证书会报错误,webview检测到证书错误以后就不请求任何数据。 注释是为了忽略掉父类的处理,默认执行下去。函数
这样的配置操做是敏感且危险的,只能用于测试环境方便抓包,线上包必定注意要恢复配置。
后记
经过查找资料,还有一个方法,经过重载WebViewClient的onReceivedSslError()函数并在其中执行handler.proceed(),便可忽略SSL证书错误,继续加载页面,代码以下:测试
WebView webview = (WebView) findViewById(R.id.webview); webview.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 不要调用super.onReceivedSslError,由于其包含了一条 handler.cancel(),第一次访问时没法加载,第二次之后能够加载 // super.onReceivedSslError(view, handler, error); // 忽略SSL证书错误,继续加载页面 handler.proceed(); } }