Android从7.0开始系统不再信任用户CA证书(应用targetSdkVersion >= 24时生效,如果targetSdkVersion < 24即使系统是7.0+依然会信任)。也就是说即使安装了用户CA证书,在Android 7.0+的机器上,targetSdkVersion >= 24的应用的HTTPS包就抓不到了。
比如上面的例子,抓包工具用内置的CA证书,创建了www.baidu.com域名的公钥证书发给Client,系统校验此证书时发现是用户CA证书签发的,sorry。。。那么,我们如果绕过这种限制呢?已知有以下四种方式(低于7.0的系统请忽略)。
=====================================================================================
如果我们想抓自己的App,只需要在AndroidManifest中配置networkSecurityConfig即可:
<?xml version="1.0" encoding="utf-8"?><manifest … >
<application android:networkSecurityConfig=“@xml/network_security_config”
… >
…
<?xml version="1.0" encoding="utf-8"?>这样即表示,App信任用户CA证书,让系统对用户CA证书的校验给予通过。更多相关信息,详见
Network security configuration:
https://developer.android.com/training/articles/security-config
=====================================================================================
如果想抓一个App的包,可以找个历史版本,只需要其targetSdkVersion < 24即可。然而,随着GooglePlay开始限制targetSdkVersion,现在要求其必须>=26,2019年8月1日后必须>=28,国内应用市场也开始逐步响应这种限制。绝大多数App的targetSdkVersion都将大于24了,也就意味着抓HTTPS的包越来越难操作了。
====================================================================
如果我们希望抓targetSdkVersion >= 24的应用的包,那又该怎么办呢?我们可以使用平行空间或者VirtualApp来曲线救国。平行空间和VirtualApp这种多开应用可以作为宿主系统来运行其它应用,如果平行空间和VirtualApp的targetSdkVersion < 24,那么问题也就解决了。
在此,我推荐使用平行空间,相比部分开源的VirtualApp&