Charles 是常用的抓包工具,由于很长一段时间没有在我的 Mac 上抓过包了,相关证书都已过期。每次配置证书都忘记相关步骤需要去网上到处找教程,索性自己记录一下,希望对其他人也有所帮助。

Charles 的下载安装什么的就不在这里写了,这里只记录使用 Charles 在苹果电脑(Mac)或苹果手机(iPhone)上的抓包使用教程。

使用 Charles 在 macOS 上进行 HTTP/HTTPS 抓包配置步骤

如果你的电脑开启了 VPN 或其他代理,请先关闭,避免影响 Charles 的正常使用。如果没有,这忽略这步。

1. Mac 设置 Charles 系统代理

打开 Charles ,在菜单栏勾选「Proxy -> macOS Proxy」,macOS 系统 HTTP/HTTPS 代理将会被自动设置为本地代理,默认端口 8888。

charles抓包

勾选后你可以看到你的网络设置中代理已经自动设置好了:

charles抓包

如果你想修改默认端口,可以通过「Proxy -> Proxy Settings…」修改端口,修改就系统代理的端口配置会自动更新。

charles抓包

到这里就可以抓 HTTP 协议的请求了,你可以在浏览器中访问 https://xxx 的网址就能看到相关请求信息。但如果你访问的是 HTTPS 协议,你可能会看到这种不安全的提示:

charles抓包

因为没有设置证书,同时又开启了 SSL 代理,所以你无法访问 HTTPS 的网页,你可以把 SSL 代理关掉就能继续正常访问 https 的网页了。

如果你需要抓 HTTPS 的包,需要设置证书才行。

2. Mac 安装 Charles 证书抓 HTTPS 包

在 Charles 菜单栏选择「Help -> SSL Proxying -> Install Charles Root Certificate」,会自动导入 Charles Proxy CA 证书并打开你的“钥匙串访问”:

charles抓包

charles抓包

输入密码进入钥匙串访问后,双击这个刚才自动导入的证书“Charles Proxy CA”,将它的信任设置中改为“始终信任”,注意它没有保存按钮,点击窗口的关闭按钮将会再次验证钥匙串访问密码然后自动保存修改后的设置

完成证书信任设置后,你看到应该是如下图这个样子:

charles抓包

到这里,你就可以在 Mac 电脑上成功抓取 HTTP/HTTPS 包了。

使用 Charles 在 iOS 上进行 HTTP/HTTPS 抓包配置步骤

同样先关闭你的 iOS 设备上 VPN/代理,避免影响 Charles 的正常使用。

在 Mac 上先打开 Charles,并确保 iOS 设备和 Mac 处于同一局域网内(可使用 Mac 创建热点分享给 iOS 设备)。

1. iOS 设置 Charles 系统代理

打开 iOS 设备的「设置 -> 无线局域网 -> 点击你当前连接的 Wi-Fi 后面蓝色的 i 图标 -> 下滑到最底部找到 HTTP 代理,点开配置代理 -> 选择手动 -> 填入 Charles 的代理 IP 地址(Mac 的局域网地址)和端口号(8888)。

配置代理中服务器里填写的是 Charles 的代理 IP 地址,可以通过在 Charles 菜单栏「Help -> Local IP Address」查看。

charles抓包

2. iOS 安装 Charles 证书抓 HTTPS 包

打开 Charles 菜单栏中的「Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser」,按提示进行操作即可。

charles抓包

charles抓包

我们在第一步已经设置好了 iOS 设备的网络代理,直接打开浏览器访问 chls.pro/ssl 这个地址,下载配置描述文件。

下载完成后,打开「设置 -> 通用 -> VPN 与设备管理 -> 已下载的描述文件」就能看到我们刚才下载的配置描述文件。

点击我们下载的这个配置描述文件,根据提示进行安装即可。

安装完成后,打开「设置 -> 通用 -> 关于本机 -> 下滑到底部找到证书信任设置 -> 开启 Charles Proxy CA 的完全信任」。

现在,我们在手机上打开 app 就能抓到对应的 HTTPS 包了。

使用 Charles 抓包的同时开启 VPN

当你要抓取的请求是需要开启 VPN 才能访问时,可以通过 Charles 的「Proxy -> External Proxy Settings…」设置你的 VPN 代理地址:

有的 VPN 客户端可能会修改覆盖 Charles 自动设置的代理配置。这个可以试试取消 VPN 客户端设置系统代理,或者调整启动顺序等方式看看是否能够解决。


也可以看看