charles+https+安卓7.0+夜神模拟器,解决安卓7.0+版本https无法抓包问题

1、配置charles+http+夜神模拟器抓包
      第一步保证http请求是可以正常抓包

1.配置charles抓包参数
Windows系统证书装一下,后续浏览器可以抓请求,和下载证书

配置抓取请求

配置端口

 2.夜神模拟器配置

配置完毕重启夜神模拟器,Windows cmd命令:ping 192.168.2.189 能正常ping通就OK

鼠标长按点击WiFi 设置代理服务器IP,charles配置的端口号

 安装一个测试包,测试一下能正常抓取http请求,完成,其他问题请百度解决,这里本次主要解决https抓取问题

2、配置charles+https+安卓7.0+夜神模拟器
谷歌在安卓7.0修改了安全策略,安卓系统 大于 7.0 时, 应用不在信任用户安装的证书文件。用户添加的 CA 证书不能再用于安全连接,对于 https 传输的数据就抓取不到了,会显示。

解决方法

降级 系统版本
将用户证书偷渡成系统证书,需要有 root 权限。将 charles 的 CA 证书安装进系统信任的证书目录下,这样在开启 charles 代理的时候,系统就会认为CA证书安全,从而可以获取 https 数据。
市场上各个手机root比较麻烦,这里直接采用夜神模拟器抓包(只是为了获取接口数据,不考虑功能兼容性)
1、Windows安装 OPENSSL【http://slproweb.com/products/Win32OpenSSL.html】。linux 好像默认安装的有,如果使用 linux 系统,可以忽略这一步。

2、配置环境变量:例如工具安装在C:\OpenSSL-Win64,则将C:\OpenSSL-Win64\bin;复制到Path中

3、下载charles证书

    下载证书到电脑上

电脑端浏览器输入 chls.pro/ssl 即可下载(如果无法打开,检查下是否配置Windows代理),
如果未下载也可以在 charles >> help >> SSL Proxying >>Save Charles Root Certificate 保存证书到本地文件夹
4、打开命令窗口执行以下命令,查看证书信息:

   证书地址,可以从文件夹文件位置直接鼠标拖拽到cmd命令窗口

openssl x509 -subject_hash_old -in C:\Users\Administator\Downloads\charles-proxy-ssl-proxying-certificate.pem

 重命名证书:016a1c82.0 (每个人的证书hash值不一样,每次导入证书都要重新生成这个值)

5、执行 adb 命令连接手机,获取权限,把文件夹挂载为读写模式,把文件复制到证书根目录

adb root
adb remount
adb shell mount -o rw,remount /system
adb push 016a1c82.0 /system/etc/security/cacerts
如果出现 .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 重启 

6、以上配置就 OK 了,可以在设置-安全-信任的凭据-系统(滑到最底部):查看已导入的证书,证书有可能默认关闭状态,记得手动打开下

测试了下微信小程序、支付宝小程序、https都是可以正常抓取

附赠:IOS 抓取HTTPS请求(IOS不用这么麻烦,证书配置正确-信任一下即可正常抓小程序、https等)

发表回复