最近很多同事反馈使用 Charles 抓包出现了很多 unknown 的问题, 现象如下图
查看右侧的原因, 给出的结果是这样的
这里将讲解如何解决这个问题, 但是开始阅读之前, 请确认符合如下的条件
本文仅适用于 Android 7 及之后设备
待抓包的应用设置了 targetSDK 为 24 及其以上
已经配置好了 charles 的证书
好的, 开始了.
原因
我们在设备上安装的 charles 证书, 属于用户添加的证书
出于应用安全的目的, Android 7 及之后默认不信任用户添加的证书 (Android 7 之前是默认信任用户添加的证书)
当我们将 App 的编译目标提到 24 及其以上, 系统就会激活这一安全限制.
如何解决
创建 App 网络安全配置文件
在应用 xml 目录下新建一个名为 network_security_config.xml , 内容为
- <network-security-config>
- <debug-overrides>
- <trust-anchors>
- <!-- Trust user added CAs while debuggable only -->
- <certificates src="user" />
- </trust-anchors>
- </debug-overrides>
- </network-security-config>
上面的代码仅仅在 debug 编译包, 信任用户添加的 CA 证书
应用配置
在 AndroidManifest Application 节点增加属性
- <?xml version="1.0" encoding="utf-8"?>
- <manifest ...>
- <application Android:networkSecurityConfig="@xml/network_security_config"
- ...>
- ...
- </application>
- </manifest>
建议重启应用, 就能解决问题了.
注意
考虑到安全问题, 上面的实现
仅仅对 debug 类型的安装包有效 (参考值为 application 节点的 Android:debuggable 属性值)
Release 类型的安装包不会有额外的安全影响
来源: http://www.tuicool.com/articles/N3uUv2q