Charles在Android7.0以上抓包https出现<unknown>的解决办法

Android7.0以上仅信任系统提供的证书,不再信任用户添加的证书颁发机构 (CA),所以直接安装Charles的证书抓包https已经无效,会出现<unknown>

Android 7.0 开发者版本 - 默认受信任的证书颁发机构

解决办法

既然是仅信任系统提供的证书,那么可以把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/文件夹

测试结果

再次抓包,已经可以看到请求了