说到抓包,这就是涉及到调试和安全问题,对于 Android 7.0 (API 24 )以下,你可以直接使用 Charles 安装相关证书配置好代理后直接实现。但是在 Android 7.0 之后,Google 推出更加严格的安全机制。
至于具体怎么配置,Google 官方给出超级全面解释,官方连接。
1. 在你自己的app下,xml目录下新建一个文件:res/xml/network_security_config_debug.xml ,配置在debug模式下信任用户证书,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates
overridePins="true"
src="system" />
<certificates
overridePins="true"
src="user" />
</trust-anchors>
</base-config>
</network-security-config>
2. 在AndroidManifest中使用它:
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config_debug" ... >
...
</application>
</manifest>
这样debug模式下就可以抓包了。release的话改为以下配置
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<!-- Trust user added CAs while debuggable only -->
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
简单分析下,为什么在 7.0 之后,在手机内直接安装证书没效果呢?这是 6.0 默认配置:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
然后这是 7.0 默认配置:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
区别显而易见,我们在手机里自己安装证书,就是对应在 user 域,对于 7.0 来说,默认是直接不信任。所以,你装代理证书失去意义。
那要解决 7.0 不能抓包调试这个问题,你可以直接配置出这文件,选择上面 6.0 默认配置方式,信任来自 user 域证书。这样,你就又可以抓包调试。
上面方式最为简单,但是也有一些安全问题。比如说,你这么一配置,其实相当于否定 Google 为 7.0 https 增强的安全策略。而且这么一来,你的 https 请求任何人都可以抓包,这有什么意义呢?
接着介绍 Google 针对这一问题,给出建议:
<debug-overrides>
<trust-anchors>
<certificates src="@raw/user"/>
</trust-anchors>
</debug-overrides>
这个就是我们在调试时可以信任的证书。
————————————————
版权声明:本文为CSDN博主「思钱想厚_hy」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a646796992/article/details/82901104