最近在测试大精品4.9项目中发现一个有意思的问题:
(1)安卓系统 7.0 以下版本,不管大精品任意版本,都会信任系统提供的证书
(2)安卓系统 7.0 及以上版本,大精品4.8及以下版本,都会信任系统提供的证书
(3)安卓系统 7.0 及以上版本,大精品4.9 版本,大精品只信任它自己配置的证书列表[link]
通过查看资料以及本次大精品的需求是Targetsdk版本升级至26,定位到问题所在:
在Android7.0及以上的系统中,每个应用可以定义自己的可信CA证书。
默认情况下,应用只会信任系统预装的CA证书,而不会信任用户安装的CA证书。
而回想抓https包的过程,无论是fiddler还是Charles,想抓https,都必须手机安装对应的证书,
通过fiddler/Charles安装的证书恰恰正属于用户安装的CA证书,因此会被视作不安全的证书。
下面是我通过查看资料以及实践后,得到的一个解决办法,进行总结:
修改app中的android:networkSecurityConfig属性,具体为:
在AndroidManifest.xml中,添加android:networkSecurityConfig="@xml/network_security_config"
<?xml version="1.0" encoding="utf-8"?>
<manifest.......>
<application android:networkSecurityConfig="@xml/network_security_config" ....>
.....
</application>
</manifest>
添加配置文件res/xml/network_security_config.xml
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" overridePins="true" />
<certificates src="user" overridePins="true" />
</trust-anchors>
</base-config>
</network-security-config>
接下来,就是重新打包,再进行抓包就可以抓到HTTPS的包了。
如果有项目源码的话,可以直接进行修改,如果没有的话,可以通过将apk文件用apktool反编译apktool,拿到包内容后,修改配置文件,然后再重新签名打包就可以了。
安卓7.0及以上系统如何抓取Https的包
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...