使用 charles 调试

安装

点击去官网下载

激活

Registered Name: https://zhile.io
License Key: 48891cf209c6d32bf4

开启 http 调试

  1. 点击菜单栏 Proxy -> Proxy Settings
  2. 填写 Port
  3. 勾选 Enable transparent HTTP proxying

20201009171421

开启抓取 macOS 请求

  1. 点击菜单栏 Proxy -> Proxy Settings
  2. 点击 macOS
  3. 勾选 Enable macOS proxy
  4. 勾选 Use HTTP proxy

20201009171951

开启抓取 Android 请求

手机连接局域网下 wifi,与 charles 必须为同一网络下。

  1. 自动开启代理

    1. 在已连接的 wifi 上点击更多,进入配置代理页。

    2. 勾选自动,在输入框URL中输入:

      Https://chls.pro/10.10.11.235:6666.pac
  2. 手动设置代理

    1. 在已连接的 wifi 上点击更多,进入配置代理页。
    2. 勾选手动,输入 charles 的 ip 与端口(ip 为 macOS 主机 ip,端口为上面填写的 http 端口)

设置 https

  1. 点击 Proxy -> SSL Proxying Settings
    20201009173147
  2. 勾选 Enable SSL Proxying
  3. 点击 Add,Host 填写 *,Port 填写 443
    20201009173256

macOS 安装证书

  1. 点击菜单栏 Help -> SSL Proxying -> Install Charles Root Certificate
    20201009172253
  2. 找到 Charles Proxy..... 并点击
  3. 点击 Trust -> When using this certificate,并勾选 Always Trust
    20201009172635

Android 安装证书

Android7 以后,系统不再信任用户级的证书,只信任系统级的证书,所以要抓包就需要把我们的 charles 证书安装至 Android 的系统目录中

准备

  1. 一台已 root 的手机
  2. Openssl

证书生成

  1. Filddler 或者其他抓包程序的证书导出,一般为 xxx.cer 或者 xxx.pem

  2. 使用 opensslx509 指令进行 cer 证书转 pem 证书 和 用 md5 方式显示 pem 证书的 hash

    # 1. 证书转换,已经是 pem 格式的证书不需要执行这一步
    openssl x509 -inform DER -in xxx.cer -out cacert.pem
    
    # 2. 进行 MD5 的 hash 显示
    
    # openssl 版本在 1.0 以上的版本的执行这一句
    openssl x509 -inform PEM -subject_hash_old -in cacert.pem
    
    # openssl 版本在 1.0 以下的版本的执行这一句
    openssl x509 -inform PEM -subject_hash -in cacert.pem

    将第二条指令输出的类似 347bacb5 的值进行复制
    tips:查看 openssl 版本的指令 openssl version

  3. 将 pem 证书重命名
    使用上面复制的值(类似于 347bacb5)对 pem 证书进行重命名

    mv cacert.pem 347bacb5.0
  4. 将新证书放入手机系统证书目录(/system/etc/security/cacerts)

    需要拷贝至此目录必须拥有 root 权限

  5. 重启 Android 设备以生效
    拷贝证书至 /system/etc/security/cacerts 之后,重启手机就可以使证书生效了

参考

charles 安装配置 for Mac

给 Android7 及以上的手机安装系统级证书,实现 Fiddler 或者其他程序的 HTTPS 的抓包