0.前言
用charles对手机app进行抓包时,有些app在使用了charles代理的时候会无法连接网络的情况,即便已经将charles证书安装到手机用户证书了也不行,这个时候一般考虑两种情况:
1.证书双向验证。详情可以参考:https://www.jianshu.com/p/22b56d977825
2.app仅信任系统证书。
关于如何区分这两种情况,我并未在网上找到明确的答案,如果有人对这方面了解的话求给小弟指条明路,感激不尽。
本文要解决的是第2种情况,出现这种情况的话直接把charles证书安装成系统证书就行了。
1.下载charles证书
打开charles,点击Help > SSL Proxying > Save Charles Root Certificate...下载证书到本地1.pem
2.证书格式化
系统证书和用户证书文件有很大不同,我们先进入系统证书目录看一下系统证书都长什么样,安卓系统证书都在/system/etc/security/cacerts目录下,用adb shell进入该目录,查看一下已有的证书
可以看到系统证书都是.0格式的,而且命名显然也是大有讲究的。
证书的名称可以用openssl获取,linux或者mac一般都有openssl,如果没有的话就自己装一个吧。使用以下命令就可以计算出证书的名字:
openssl x509 -inform PEM -subject_hash_old -in 1.pem
得到文件名之后把证书重命名以下就可以了
mv 1.pem e03d39e3.0
3.将证书放到安卓系统证书目录
adb连接root后的模拟器
修改system目录读写权限
mount -o remount,rw /system
如果这一步有问题先卸载一下/
had the same issue.The solution is to mount the root (/). After this you can write to /system.
mount -o rw,remount /
Don't forget to reset the state to 'ro'.
mount -o ro,remount /
移动进去之后直接重启模拟器
4.设置charles
Charles默认不开启https抓包,所以我们需要进行以下设置
首先将Charles证书安装到电脑
点击Help > SSL Proxying > Install Charles Root Certificate,在弹出窗口中点击“安装证书”,然后选择安装到本地计算机,点击下一页,选择将所有证书都放入下列存储,选择受信任的根证书颁发机构,确定。
第二步开启https代理
点击Proxy > SSL Proxying Setting,勾选Enable SSL Proxying,添加代理域名/端口 :