Android7.0以上仅信任系统提供的证书,不再信任用户添加的证书颁发机构 (CA),所以直接安装Charles的证书抓包https已经无效,会出现<unknown>
解决办法
既然是仅信任系统提供的证书,那么可以把Charles安装为系统证书,这个操作需要设备已经ROOT
保存Charles证书(文件名为charles-ssl-proxying-certificate.pem
)到本地
获取证书文件Hash值
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
重命名证书文件
证书的命名规则是[Hash].[Number]
,后缀名的数字是为了避免文件名冲突,如果有多个证书的Hash值是一样的,后缀名的数字就可以从0开始编上号。
比如上步获取的Hash值为10f7f839
,重命名证书文件为10f7f839.0
安装成系统证书
把重命名后的证书文件推送到手机上
1 | adb push 10f7f839.0 /sdcard |
用RE管理器之类的文件管理器,将证书文件复制到/system/etc/security/cacerts/
文件夹
测试结果
再次抓包,已经可以看到请求了