Android 官网:网络安全配置
近期升级了targetSdkVersion
到28,发现无法抓取到https请求包,查看了一下,Google修改安全策略了
默认配置
- Android6.0 (API 级别 23)及更低版本应用的默认配置如下所示:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
- Android 7.0(API 级别 24)到 Android 8.1(API 级别 27)的应用的默认配置如下所示:
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
- Android 9(API 级别 28)及更高版本应用的默认配置如下所示:
<base-config cleartextTrafficPermitted="false">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
分析&解决
6.0---> 7.0 可以发现,默认配置少了 <certificates src="user" />
也就是不信任用户添加的CA证书(ps: 所以抓包工具请求Https包的时候会失败)。9.0 更严格,默认不信任用户添加的CA证书,还禁止了http明文请求。
最简单的方式就是项目修改为使用 Android6.0的默认配置
1.修改targetSdkVersion = 23
2.新建 network_security_config.xml
文件,目录结构如下图:
3.
network_security_config.xml
文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
</network-security-config>
4.将刚新建的xml文件添加到清单文件中,如下图:
image.png附:仅在debug模式下允许抓包配置如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides>
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
网友评论