From:https://testerhome.com/topics/21956
OpenSSL :https://slproweb.com/products/Win32OpenSSL.html
谷歌在安卓7.0修改了安全策略,安卓系统 大于 7.0 时, 应用不在信任用户安装的证书文件。用户添加的 CA 证书不能再用于安全连接,对于 https 传输的数据就抓取不到了,会显示<unknown>。
解决方法
- 降级 APP
- 降级 系统版本
- 将用户证书偷渡成系统证书,需要有 root 权限。将 charles 的 CA 证书安装进系统信任的证书目录下,这样在开启 charles 代理的时候,系统就会认为CA证书安全,从而可以获取 https 数据。
Fiddler 证书安装到安卓根目录
一台已 root 过的手机,开启开发者选项,然后连接电脑。
安卓系统证书跟 Fiddler 证书的格式不一样,需要转换。
1、安装 OPENSSL【https://slproweb.com/products/Win32OpenSSL.html】。linux 好像默认安装的有,如果使用 linux 系统,可以忽略这一步。
2、下载 fiddler 证书到电脑上
3、打开命令窗口,执行以下命令,查看证书哈希信息:
openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer
安卓系统的安全证书在 /system/etc/security/cacerts/目录下,进入adb shell,打开目录就能看到这些证书文件。
文件名是 Hash值 加 数字后缀。后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
4、转换证书
openssl x509 -inform DER -in FiddlerRoot.cer -text > [哈希].0
5、用记事本编辑证书
将 -----BEGIN CERTIFICATE----- 到 -----END CERTIFICATE----- 的部分放到文件最前面
6、将证书放到手机的 /system/etc/security/cacerts/
下
执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录
adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts
重启手机,可以看到 Fiddler 的证书已经变成系统证书了,接下来就可以愉快的抓包了
Charles 证书安装到安卓根目录
一台已 root 过的手机,开启开发者选项,然后连接电脑。
下载证书到电脑上
- 电脑端浏览器输入 chls.pro/ssl 即可下载,
- 如果未下载也可以在 charles >> help >> SSL Proxying >>Save Charles Root Certificate 保存证书到本地文件夹
打开命令窗口执行以下命令,查看证书信息:openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem
重命名证书:mv charles-ssl-proxying-certificate.pem e5742ab9.0
执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录
adb root
adb remount
adb shell mount -o rw,remount /system
adb push e5742ab9.0 /system/etc/security/cacerts
以上就 OK 了。如果不放心可以 cd 到对应目录,检查文件是否存在,文件权限是否与其他证书一致。证书安装 OK,其他代理选项正常配置即可
如果出现 <hash>.0:Read-only file system 这个警告,这是因为 system 文件为只读,需要将其挂载为可读写。一般的解决方法是:mount -o rw,remount /system 修改system读写权限,然后再进行复制操作。如果修改了之后还是提示Read-only file system,还有方法
adb root
adb disable-verity
adb reboot #手机会重启,不用关闭cmd窗口,手机可能需要拔掉数据写重新连接
adb root
adb shell
mount -o rw,remount /system #再次进行修改
然后就可以进行复制操作了。复制完之后输入reboot 重启
重启之后,打开设置 ---> 更多设置 ---> 系统安全 ---> 信任的凭据中可以看到安装的证书
然后通过设置 charles 代理就可以查看到 https 的数据了。