在 Mac 上查看 iPhone 的 HTTPS 流量
这篇指南从一部装好 Chute 的手机开始,到 Mac 上打开一个窗口、看到这部手机解密后的请求(含请求与响应正文)、可以筛选和导出为止。它把各自有参考页的东西——CA、主机列表、录制、控制通道、Dashboard——按你实际操作的顺序串起来,并在每一步说明继续之前你应该看到什么。
你需要:
- 手机上的 Chute iOS,且已有许可证。在 iPhone 上,HTTPS 解密和正文捕获是需要许可证的功能;没有许可证时下面的一切仍能连上,但 HTTPS 行始终不透明、数据 Tab 始终为空。见许可证与激活。
- Mac 上的 Chute Dashboard——免费,不需要许可证。
- 一根 USB 线(推荐:网络上什么都不用开放,蜂窝网络下也能用),或者手机和 Mac 在同一个 Wi-Fi 下。
如果你不想在 Mac 上装任何东西,Web 控制台在浏览器里显示同样的连接、正文和改写,手机上只需要
external-http-controller。下面的第 1–3 步对它同样适用;从第 4 步起,改按打开 Web 控制台操作。
1. 安装并信任 CA
在手机的配置编辑器里:MITM → 配置 CA → 生成新的 CA 证书,然后 将 CA 证书安装到系统,再到 设置 → 通用 → 关于本机 → 证书信任设置 信任它。完整步骤——包括所有人都会漏掉的那一步——在 HTTPS 解密页。
你应该看到:证书页显示 受信任的 CA 证书。如果显示的是不受信任,证书信任设置里的开关还没打开——打开之前后面什么都不会成功。
2. 声明要解密哪些主机
Chute 只解密你列出的主机。在编辑器的 MitM 分区(就是有 配置 CA 的那个)里,加上你要看的主机。从窄的开始——你在调试的那个 App 的 API 主机——而不是 *:每多解密一个主机都要耗手机的 CPU,而且有些 App 固定了证书,一解密就坏。*.apple.com 最好一开始就排除掉。
[MITM]
enable = true
hostname = api.example.com, *.example.net, -*.apple.com
语法——端口、- 排除、/path 限定——在 HTTPS 解密页。之后也可以在 Dashboard 的 MitM 规则 面板里边看效果边增删主机,再把有用的写进配置。
3. 打开解密和录制
在手机的控制面板上,两个开关:
- MitM —— 对第 2 步的主机打开解密。
- 转储数据 —— 记录请求与响应正文(即
replica设置)。不开的话,Dashboard 能看到每条连接及其规则与策略,但没有数据。
两个开关之后也都能从 Dashboard 的工具栏拨,所以现在忘了也没关系。除非写进配置([General] 里 replica = true、[MITM] 里 enable = true),否则重启后都不保留。
4. 允许 Dashboard 连接
在配置编辑器里:外部控制器 → 外部控制器访问。
- 打开 允许 Chute Dashboard/Chute CLI 连接。
- 填一个 端口(任意空闲端口;没有偏好就用
6170)和一个你自己的 密码。 - 允许通过 Wi-Fi 访问:走 USB 就让它关着。只有你打算通过 Wi-Fi 连接时才打开——它会把监听器开放给这个网络上所有知道密码的人。
- 保存,然后启动(或重启)隧道。
你应该看到:控制面板显示 外部访问端口:6170(你的端口)。如果没有这一行,说明隧道跑的不是保存后的配置——重启它。
5. 连接 Dashboard
把手机用线连上 Mac,手机上如果询问就点 信任 这台电脑。打开 Chute Dashboard;在 Chute 新建仪表盘 窗口里用 USB 分区:填第 4 步的 端口 和 密码,连接。
改走 Wi-Fi 的话:用 远程 分区,主机 填手机的地址(设置 → Wi-Fi → ⓘ 里的 IP 地址),端口和密码同上。
你应该看到:一个以该连接为标题的 Dashboard 窗口,随着手机发起连接,它的 活跃 列表逐渐填满。如果是空的,用手机操作几秒钟。这一步可能出的两种错都有明白的提示:密码不匹配,以及窗口根本打不开——手机不可达(地址错、Wi-Fi 访问没开、隧道没在跑)。细节在 Dashboard 页。
6. 检查工具栏开关
活跃列表顶部是第 3 步那两个开关在 Dashboard 里的样子:
- 记录流量 应显示为 停用流量记录——录制已开。如果还是记录流量,点一下。
- 启用 MitM(N 条规则) 应显示为 停用 MitM(N 条规则)——解密已开,
N是第 2 步的主机数。如果N是0,主机列表没有到达手机:检查第 2 步并重启隧道。
7. 复现并找到请求
在 App 里做那个你想看流量的操作。然后收窄列表:工具栏的 筛选 打开筛选栏;在 筛选主机/URL… 里输入主机,或者勾上 仅 MitM 只留解密过的行。
你应该看到:你的主机的行在 标记 列有 M,方法 是真实的(GET、POST),状态 也不再是 CONNECT。打开一行:请求头 Tab 有头、查询参数和 Cookie;响应数据 显示正文——是 JSON 就显示成 JSON 树,是图片就显示成图片。
如果你的主机的行显示 CONNECT 且没有 M,说明这条连接没有被解密。按可能性从高到低:主机不在列表里(或模式匹配不上——api.example.com 不覆盖 www.example.com);MitM 关着;CA 装了但没信任(App 自己会报证书错误);App 固定了证书(排除这个主机,接受看不到里面);App 走的是 QUIC 上的 HTTP/3,无法解密——设置 block-quic 把它逼回 TCP。
如果行上有 M 但数据 Tab 显示 无数据:这条连接运行时录制是关的(打开后再复现一次);主机被手机上的 [Replica] 过滤掉了;或者正文大于 2 MiB,手机拒绝交出。
8. 保存你的发现
在行上右键:将所选导出为 HAR… 得到一个能用浏览器开发者工具、Charles 或 Proxyman 打开的文件;复制 curl 命令 可以在 Mac 的终端里重放某个请求;将所选导出为 CSV… 给电子表格用。数据 Tab 里的 导出为 bin 把一个正文按捕获时的样子存下来。
9. 改点什么(可选)
MitM 视图的面板编辑的是运行中的内核。两个快速实验:
- Header 重写 → 为你的主机加一条规则:请求、添加、
X-Debug=1。复现;新的行带上H和R,详情窗口的 命中的规则 会引出你的规则。 - Map Local → 用一个文件应答某个端点。对手机来说,文件路径必须是手机读得到的,所以这个面板的 文件路径(你 Mac 上的路径)不适用;改用规则的
base64=形式,从手机自己的编辑器或 Web 控制台添加——见 MitM 工具下的注意。被模拟应答的行带K。
这里加的规则在隧道重启后就没了。哪条管用,就把它写进配置——参考页:URL 重写、Header 重写、Body 重写、Mock 响应。
结束之后
- 关掉 转储数据,或设
replica = false:录制开着的时间里,正文会一直在手机上累积。 - 如果你打开过 允许通过 Wi-Fi 访问,把它关回去。
- 以后还要做就把 CA 留着;否则到 设置 → 通用 → VPN 与设备管理 里移除。
本页为英文版的翻译。如内容有出入,以英文版为准。