Charles证书安装为安卓系统证书
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...下载证书到本地
这里有个坑,选择下载目录后,需要在文件夹名后面加上"\xxx"才会把证书下载到该目录下的xxx.pem文件,否则的话证书会下载到上一级目录,而证书名就是最后一级目录的名称,比如这里如果没有加"\chrales",那证书就会下载到D盘根目录的work.pem文件。搞的我第一次下的时候老找不到文件,重新下又说文件已存在,蛋疼。
![](http://upload-images.jianshu.io/upload_images/23701021-9f3f52acb68eb91e.png?imageMogr2/auto-orient/strip|imageView2/2/w/1018/format/webp)
2.证书格式化
系统证书和用户证书文件有很大不同,我们先进入系统证书目录看一下系统证书都长什么样,安卓系统证书都在/system/etc/security/cacerts目录下,用adb shell进入该目录,查看一下已有的证书
![](http://upload-images.jianshu.io/upload_images/23701021-f2ff2ced5d2bef5a.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)
可以看到系统证书都是.0格式的,而且命名显然也是大有讲究的。
证书的名称可以用openssl获取,linux或者mac一般都有openssl,如果没有的话就自己装一个吧。使用以下命令就可以计算出证书的名字:
openssl x509 -inform PEM -subject_hash_old -in xxxx.pem | head -1
![](http://upload-images.jianshu.io/upload_images/23701021-fa44199cb50a6023.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/1102/format/webp)
得到文件名之后把证书重命名以下就可以了
mv charles.pem e03d39e3.0
3.将证书放到安卓系统证书目录
这里需要一部拥有root权限的安卓设备,建议使用夜神模拟器,直接下载最新版,默认有root权限,并且夜神模拟器自带有adb,方便下面的步骤。
利用夜神模拟器的文件传输功能将证书传到安卓模拟器,需要把证书先放到电脑夜神模拟器共享目录,然后把证书拖动到夜神模拟器窗口就完成传输了,文件会传到模拟器的共享目录。
![](http://upload-images.jianshu.io/upload_images/23701021-18daef65af7479b7.png?imageMogr2/auto-orient/strip|imageView2/2/w/887/format/webp)
然后打开cmd,进入夜神模拟器adb目录,这个要看个人的安装目录,我的电脑是D:\Program Files\Nox\bin
然后在cmd中依次输入以下命令就行了
进入shell
adb shell
获取超级用户权限
su
修改system目录读写权限
mount -o remount,rw /system
将安卓共享目录中的证书文件复制到系统证书目录中去
cp /sdcard/Pictures/e03d39e3.0 /system/etc/security/cacerts/
开启证书权限
chmod 644 /system/etc/security/cacerts/e03d39e3.0
![](http://upload-images.jianshu.io/upload_images/23701021-2da305156145b627.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/860/format/webp)
4.设置charles
Charles默认不开启https抓包,所以我们需要进行以下设置
首先将Charles证书安装到电脑
点击Help > SSL Proxying > Install Charles Root Certificate,在弹出窗口中点击“安装证书”,然后选择安装到本地计算机,点击下一页,选择将所有证书都放入下列存储,选择受信任的根证书颁发机构,确定。
第二步开启https代理
点击Proxy > SSL Proxying Setting,勾选Enable SSL Proxying,添加代理域名/端口
![](http://upload-images.jianshu.io/upload_images/23701021-7b6e2ea10f74622e.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/831/format/webp)
可以直接两个通配符代理所有https请求
![](http://upload-images.jianshu.io/upload_images/23701021-23ff618c574d98c3.png?imageMogr2/auto-orient/strip|imageView2/2/w/654/format/webp)
经过这两步操作就可以开始抓包https请求了
5.设置设备代理
安卓模拟器中点击设置打开wifi,长按wifi修改网络
![](http://upload-images.jianshu.io/upload_images/23701021-fd04c9dc214ab993.jpg?imageMogr2/auto-orient/strip|imageView2/2/w/814/format/webp)
填入charles代理地址后保存即可,可以在Charles中点击Help > SSL Proxying > Install Charlse Root Cetificate on a mobile device or remote browser看到ip地址和端口
![](http://upload-images.jianshu.io/upload_images/23701021-7e61128b58e47bf1.png?imageMogr2/auto-orient/strip|imageView2/2/w/816/format/webp)
作者:96dbf2940072
链接:https://www.jianshu.com/p/2f85142023e8
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。