Android 7.0 以上 Charles 和 Fiddler 无法抓取 HTTPS 包的解决方式
2013 年 7 月 14 日
最近升级了 targetSdkVersion 到 28 后发现在 Android 7.0 以上机型 Charles 抓取 https 包时显示找不到证书,但是 Android 6.0 机型还是可以正常抓包。原因是因为从 Android 7.0 开始,默认的网络安全性配置修改了,具体请阅读官方文档 网络安全性配置
。
问题原因
Android 6.0(API 23)及更低版本应用的默认网络安全性配置如下:
而在 Android 7.0(API 24)及更高版本应用的默认网络安全性配置如下:
对比很容易发现,在 Android 7.0(API 24)及更高版本应用上,默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles 和 Fiddler 抓包工具的证书,所以抓取 HTTPS 包时才会失败。
解决方式
所以解决该问题就需要应用信任 Charles 和 Fiddler 抓包工具的证书抓包工具即可。
最简单的解决方式是使用 Android 6.0 以下的网络安全性配置:
添加 res/xml/network_security_config.xml
:
然后在清单文件中指向该文件:
...
这种解决方式有一个安全风险:正式版的应用会有被他人抓包的风险。
如何只在调试模式下允许抓包呢?
使用
即可实现只在 android:debuggable
为 true
时才生效的配置:
网上有些解决方式是将 Charles 和 Fiddler 的证书添加到 raw
文件夹下的方式也可以,但是繁琐了点。