知识的价值不在于占有,而在于使用。这篇文章主要讲述安卓7.0及以上版本抓包https失败解决方法相关的知识,希望能为你提供帮助。
【安卓7.0及以上版本抓包https失败解决方法】目录
- 现象
- 原因
- 解决办法
- webview抓包失败
- 警告
现象
android7.0以上的手机https抓包失败(安装了https证书也不行)
原因
android7.0+的版本新增了证书验证(系统证书)
解决办法
前提:在手机端和电脑端都必须安装https的安全证书
配置:打测试包时,项目设置默认信任所有证书(系统+用户)
1.在工程res-xml目录中创建一个名为 network_security_config.xml的文件,文件内容如下:
<
network-security-config>
<
base-config cleartextTrafficPermitted="
true"
>
<
trust-anchors>
<
certificates src=https://www.songbingjia.com/android/"
system"
overridePins="
true"
/>
<
certificates src="
user"
overridePins="
true"
/>
<
/trust-anchors>
<
/base-config>
<
/network-security-config>
2.在AndroidManifest里的标签中,添加如下代码:
android:networkSecurityConfig="
@xml/network_security_config"
重新打包项目,然后抓包,即可成功。
webview抓包失败
上面可以解决android原生抓包问题,但在android7.0以上的手机,开着网络代理访问不了webview,若要抓包webview,
需要在webview的WebViewClient中,将一行代码给注释掉:
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();
}
}
推荐阅读
- 新东方APP技术架构演进, 分布式系统架构经验分享
- PowerApps Label 换行
- android学习整理
- PowerApps 添加圆形图片
- Jenkins+Gradle实现Android移动端自动打包+生成apk二维码
- SpringMVC组件扫描,HandlerMapping配置,servlet配置过程出错
- Android连载22-自定义广播之标准广播发送
- HttpApplication处理对象与HttpModule处理模块
- muiapp中如何实现每次tab切换都刷新页面