前言:
记录一场手动写入系统证书
前景
谷歌在安卓7.0修改了安全策略,用户添加的CA证书不能再用于安全连接,对于https传输的数据就抓取不到了,会显示<unknown>。
我的解决方法是将charles的CA证书安装进系统信任的证书目录下,这样在开启charles代理的时候,系统就会认为CA证书安全,从而可以获取https数据。
准备工作:
- 一台已root过的手机,我用的是小米5,开启开发者选项连接电脑。
- 下载charles证书,电脑端浏览器输入chls.pro/ssl即可下载,如果未下载也可以在charles>>help>>SSL Proxying>>Save Charles Root Certificate保存证书到本地文件夹
具体步骤:
- 重命名证书
安卓系统的安全证书在 /system/etc/security/cacerts/目录下,进入adb shell,打开目录就能看到这些证书文件,文件名是Hash值加数字后缀。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
用 “openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem”计算出hash值,并将后缀设为0
image.png
生成hash后,替换对应名称重新生成文件
//cer格式
openssl x509 -inform DER -text -in xxx.cer > 0dd2455e.0
//pem格式
openssl x509 -inform PEM -text -in xxx.pem > 0dd2455e.0
-
打开文件
然后打开这个文件,将这个挪到文件的开头,然后保存
image.png -
挪动文件
首先将文件<hash>.0 push到/sdcard/Download目录下(cmd 要进入文件目录下操作)
然后复制到/system/etc/security/cacerts/目录下 -
重启,去系统证书看结果
image.png
然后通过设置charles代理就可以查看到https的数据了。
网友评论