侧边栏壁纸
  • 累计撰写 42 篇文章
  • 累计创建 82 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

Mac下Android/IOS安装Charles信任证书

Even
2022-10-29 / 0 评论 / 0 点赞 / 2,677 阅读 / 1,565 字 / 正在检测是否收录...

charles

一、简介

Charles 抓包是日常开发当中经常会用到的技术, 目前常见的抓包工具是用fiddler和Charles, 在 Android 6 之前, 手机系统既信任系统内置的证书, 也信任用户自己安装的证书, 但是在 Android 7 之后, 却发生了变化, 手机系统只信任系统内置的根证书。7.0以后我们可以配合xposed的模块把证书验证给设置为可信任的,但是大部分app都会做xposed检测,还是依然抓不到包,当然这是为了手机系统更安全。 但是这样以来, 原来抓包的方法就失效了。本文主要全面讲解 IOS 和 Android 系统如何去配置根证书,彻底解决抓包所遇到的最头疼的问题。

二、准备工作

  1. 下载 charles, 官网的地址: https://www.charlesproxy.com
  2. 配置要抓包的主机和端口, Proxy > SSL Proxying Settings > SSL Proxying

image-20221029100854656

启用 Enable SSL Proxying, 同时在 Include 当中添加 Location, 如下图所示(这是个通配符配置, 一般状况下, 这个这个已经能够满足绝大数抓包的需求了)。

image-20221029101100760
  1. 配置代理服务器的端口, Proxy > Proxying Settings, 设置端口 默认8888, 各位自己按照喜好设置
image-20221029101415597

三、Android 上安装证书方法

导出 Charles 的证书, 这个证书是抓包的时候安装在手机上的证书. 方法有两种:

image-20221029101801960

方法一:

  • 在 Android 手机上配置代理, 主机是你安装 Charles 的主机的 IP (注意: Android 手机需要和安装的Charles的电脑在同一网段下), 端口号是 8888. (这个可以自行百度各种手机的配置方法.)
  • 在 Android 手机的浏览器上输入网址chls.pro/ssl, 然后下载文件.
  • 将下载好的文件拷贝到电脑上, 进行如下的操作:
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.crt

charles-proxy-ssl-proxying-certificate.crt 是拷贝的证书文件

上面输出的结果类似于:

f1c8a61c
-----BEGIN CERTIFICATE-----
MIIFUDCCBDigAwIBAgIGAYPLKAxWMA0GCSqGSIb3DQEBCwUAMIGsMT0wOwYDVQQD
....
sUBY7dHZCJd9TkMQvL9UK5Ooy8A=
-----END CERTIFICATE-----

然后将 charles-ssl-proxying-certificate.crt 文件重命名f1c8a61c.0 (f1c8a61c需要根据你自己生成 的结果进行调整)

方法二:

  • Charles 进入 Help > SSL Proxying > Save Charles Root Certificate, 导出 pem 格式证书.
  • 然后进行如下的操作:
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem

charles-ssl-proxying-certificate.pem 是导出的证书文件

上面输出的结果类似于:

image-20221029103341080

然后将 charles-ssl-proxying-certificate.pem 文件重命名为 f1c8a61c.0(f1c8a61c需要根据你自己生成 的结果进行调整)

  1. 拷贝文件, 将生成好的证书文件拷贝到 /system/etc/security/cacerts/ 目录下, 并且修改文件权限:
# 拷贝文件
adb push f1c8a61c.0 /system/etc/security/cacerts/

# 修改文件权限
adb shell
cd /system/etc/security/cacerts/
chmod 644 f1c8a61c.0

四、iphone 上安装证书方法

  • Charles 当中点击 Help > SSL Proxying > Install Charles Root Certificate in ios Simulators

image-20221029102551740

  • 点击 iPhone 手机的 Safari 或者 Safari浏览器, 输入网址 http://chls.pro/ssl, 点击下载 charles 的证书.
  • 进入 iPhone 手机的 Settings > General > Profile(s) 或者 设置 > 通用 > 描述文件:

image-20221029102223914

  • 点击 Install 或者 安装, 安装 chls 证书.

image-20221029102251772

  • 进入 iPhone 手机的 Settings > General > About > Certificate Trust Settings 或者 设置 > 通用 > 关于本机 > 证书信任设置, 启用已经安装好的 Charles Proxy CA 证书.

image-20221029102316369

五、VMOS 上安装证书方法

  1. 下载应用 VMOS

官网地址是: http://www.vmos.cn

注: VMOS 应用就是一台 Android 虚拟机, 目前好像只支持 32 位系统, 大部分应用都可以使用, 如果有的应用明确需要 64位系统, 可以使用 VMOS Pro, 当然了这个 root 功能是收费的了.

  1. 安装证书

与上面Android 安装方式一样

  1. 拷贝文件

将生成好的证书文件拷贝到 /system/etc/security/cacerts/ 目录下, 并且修改文件权限:

# adb 连接到 vmos 虚拟机
adb connect 192.168.50.182:5666
 
# 拷贝文件
adb push f1c8a61c.0 /system/etc/security/cacerts/

# 修改文件权限
adb shell
cd /system/etc/security/cacerts/
chmod 644 f1c8a61c.0

192.168.50.182:5666VMOS 虚拟机的 adb 连接. 在进入 VMOS app后, 进入 设置 > 其他设置 当中, 按照下图所示进行设置, 然后重启 VMOS app 即可生效:

image-20221029103516032

  1. 设置全局代理

到此为止, 你已经成功了一半, 接下来就需要设置 VMOS 的全局代理地址为当前的 Charles 的代理服务器的地址. 设置操作如下:

# adb 连接到 vmos 虚拟机(如果之前已经连接过可以省略)
adb connect 192.168.50.182:5666

# 设置 vmos 的全局代理
adb shell settings put global http_proxy 192.168.50.14:8888

192.168.50.14:8888 是我的 Charles 的主机IP地址, 这个需要根据自己的情况修改. 这一步很重要的, 如果没有这一步操作, 前面的准备工作都白搭了!

到处为止, 大家就可以愉快的抓包了. 要么去 VMOS 的应用商店下载应用, 要么自己把应用传递到 VMOS 当中. 这个大家自己去探索吧, 是非常简单的操作.

六、问题解答

  1. IOS手机连接Charles后无法上网,证书和信任都设置了,求问怎么解决?

针对ios自带的app(比如, appstrore), 无法上网是正常的. 但是如果其他第三方的app也无法上网, 又按照操作进行的, 则这个app可能是可能是使用了双向TLS加密, 这个是需要先获取到内置的证书(去Google找解决方法). 然后需要导入内置的证书,最后重新抓包.

  1. 您好 openssl x509 -subject_hash_old -in charles-proxy-ssl-proxying-certificate.pem运行后显示unknown option -subject_hash_old
    usage: x509 args请问这个咋解决

升级下 OpenSSL 版本

  1. 移动文件没有权限,adb: error: failed to copy ‘f1c8a61c.0’ to ‘/system/etc/security/cacerts/f1c8a61c.0’: remote couldn’t create file: Read-only file system
# 先拷贝到/sdcard,再移动
adb push f1c8a61c.0 /sdcard

# 进入手机
adb shell

# 获取root权限
su

# 移动文件
mv /sdcard/f1c8a61c.0 /system/etc/security/cacerts/

🔗 参考原文:https://zhuanlan.zhihu.com/p/281126584

0

评论区