抓取Android设备中的HTTPS请求, 比抓取Android设备中的HTTP请求要多一个步骤, 多的这个步骤就是要在Android设备中安装Charles Proxy CA
。
Android7.0
之前的系统会信任用户自己安装的证书;而Android7.0
开始的系统不信任用户自己安装的证书。
1、与抓取Android设备中的HTTP请求的步骤一样
2、确认Android设备的系统版本是多少
Android7.0
之前的系统安装了Charles Proxy CA
即可抓取HTTPS请求, 下面就是安装Charles Proxy CA
的方法:
在Android设备的浏览器中打开http://chls.pro/ssl,会出现如下的弹出框:
这个链接的本质就是从您本地PC上的Charles中复制证书到您的Android设备,然后安装之。
给这个证书取个名字,比如Charles
,然后点击OK
按钮。
Android7.0
开始的系统默认不信任用户自己添加到系统的CA证书,也就是说, 即使你在Android7.0
之后的系统上安装了Charles Proxy CA
, 也无法抓取HTTPS请求,那如何解决此问题呢?
Android官方解决方案对我们来说,一般没啥作用,因为我们抓包通常是抓别人的App的数据,我们一般不会对别人的App做修改。
还有一种办法需要把手机ROOT掉,方法如下:
Android
系统的系统证书的存放目录是:/system/etc/security/cacerts/
。
下面是某Android手机的/system/etc/security/cacerts/
目录下的内容:
该目录里面的证书文件的文件名规则为:${Certificate_Hash}.{Number}
。
${Certificate_Hash}
可以通过如下命令获得:
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -n 1
{Number}
作为后缀名,是为了防止文件名冲突的,比如如果两个证书算出${Certificate_Hash}
是一样的话, 那么其中一个证书的后缀名数字可以设置成0
,而另一个证书的后缀名数字可以设置成1
。
计算好${Certificate_Hash}
之后,我们就把证书重命名:
cp charles-ssl-proxying-certificate.pem e18b03cd.0
把符合命名规则的证书推送到手机的/system/etc/security/cacerts/
目录下:
adb push e18b03cd.0 /system/etc/security/cacerts/e18b03cd.0
此时你应该可以在手机的设置->安全->加密与凭据->信任的凭据
的系统标签页看到你新加入的证书,将其启用即可顺利抓包
Read-only file system
mount -o remount rw /