HTTPS 解密(中间人攻击,MitM)
Chute 可以通过 MitM 解密 HTTPS 流量。更多信息请参阅 Wikipedia 文章。
证书生成器可以帮助你生成一个新的 CA 证书用于调试,并使该证书被系统信任。此功能在 Chute Mac 和 Chute iOS 的 Chute Editor 中可用。该证书在本地生成,仅保存在你的配置文件中和系统钥匙串中。新证书的密钥使用 OpenSSL 随机生成。
你也可以使用已有的 CA 证书。将证书导出为 PKCS#12 格式(.p12)并设置密码。请注意,由于系统限制,密码不能为空。使用 "base64" 命令编码为 base64 字符串,并将以下设置追加到你的配置文件中。
[MITM]
enable = true
ca-p12 = MIIJtQ.........
ca-passphrase = password
hostname = *google.com
Chute 仅解密此处声明的主机的流量。
支持通配符 和 ?。请注意,? 只有在规则中同时包含 `时才作为通配符使用;只包含?` 的规则会按字面值比较。
- 使用前缀 - 来排除主机名。
- 默认情况下,仅发往 443 端口的请求会被解密。
- 使用后缀 :port 来允许其他端口。
- 使用后缀 :0 来允许所有端口。
示例:
-*.apple.com:排除所有发往 *.apple.com 443 端口的请求。www.google.com:允许对 www.google.com 的 443 端口进行 MitM。www.google.com:8080:允许对 www.google.com 的 8080 端口进行 MitM。www.google.com:0:允许对 www.google.com 的所有端口进行 MitM。*:允许对所有 443 端口的主机名进行 MitM。(不推荐)*:0:允许对所有主机的所有端口进行 MitM。(不推荐)
主机名条目还可以在第一个 / 之后包含路径模式。系统会先匹配主机部分来决定是否解密该连接,然后由路径模式筛选哪些请求会被解密和处理。
example.com/api/*:允许对 example.com 的 443 端口进行 MitM,但仅限于路径匹配/api/*的请求。
一个通用的配置可能如下:
hostname = -*.apple.com, -*.icloud.com, *
Chute 将对所有 MitM 请求应用 URL 重写、Header 重写、Body 重写和 Mock(Map Local)规则以及脚本。
MitM 支持 HTTP/2:Chute 通过 ALPN 同时向客户端提供 h2 和 http/1.1。Surge 的 [MITM] 键 h2 和 tcp-connection 在配置文件中会被接受但会被忽略。
某些应用程序具有严格的安全策略,使用固定证书或 CA。对这些主机启用解密可能会导致问题。
安装并信任 CA 证书
生成(或导入)CA 只完成了一半——操作系统还必须信任它。两步都完成之前,所有被解密的网站都会报证书错误。应用内的证书页面会显示当前状态(「受信任的 CA 证书」/「不受信任的 CA 证书」)。
Chute iOS —— 在配置编辑器中打开 MITM → 配置 CA:
- 生成新的 CA 证书(已有证书则用导入 P12 证书)。
- 点将 CA 证书安装到系统。会打开一个 Safari 页面——点 Install Certificate 并允许下载,然后在设置 → 通用 → VPN 与设备管理中安装已下载的描述文件。
- 信任它:设置 → 通用 → 关于本机 → 证书信任设置,为 Chute 的 CA 打开完全信任开关。这一步最容易被漏掉——不做它证书只是「已安装」而非「已信任」,解密会一直失败。
Chute Mac —— 在配置窗口中打开 MitM:
- 生成新证书(或从 PKCS#12 文件导入证书)。
- 点安装证书到系统。macOS 会请求管理员密码,并把证书作为受信任的根证书写入系统钥匙串——无需再手动操作「钥匙串访问」。
- 导出证书可以保存一份
.pem,用于安装到其他设备。
如果证书已受信任但某个应用仍然失败,它多半固定(pin)了自己的证书——用 - 前缀把它的主机从 hostname 中排除即可,不必硬碰。
选项
skip-server-cert-verify
skip-server-cert-verify = true
在执行 MitM 时不验证远程主机的证书。启用后,Chute 将接受上游服务器提供的任何证书,包括自签名或无效的证书。这对开发环境很有用,但会降低安全性。
[MITM]
enable = true
ca-p12 = MIIJtQ.........
ca-passphrase = password
skip-server-cert-verify = true
hostname = *google.com
安全说明:启用
skip-server-cert-verify会使 MitM 连接容易受到 Chute 与上游服务器之间的中间人攻击。仅在受信任的网络或开发环境中启用此选项。
本页为英文版的翻译。如内容有出入,以英文版为准。