HTTPS 解密

Surge 通过中间人攻击(MitM)解密 HTTPS 流量。你可以参考维基百科的这篇文章获取关于 MitM 的更多信息:Wikipedia

证书生成器会帮你生成一份受系统信任的用于开发的 CA 证书。这个在 macOS 和 iOS 版都能操作。生成的证书只会被保存在本地和系统的钥匙串。新生成的证书对应的 key 通过 OpenSSL 随机生成。

你也可以用既存的 CA 证书,需要以 PKCS#12(.p12)格式导出并随附密码,然后就像下面这样导入。需要注意的是,系统不接受 ca-passphrase 为空的证书,所以这一项必须要填。密码可以用 base64 命令加密成一个 base64 类型的字符串。

[MITM]
enable = true
ca-p12 = MIIJtQ.........
ca-passphrase = password
hostname = *google.com

打开 MitM 解密后,Surge 默认不会解密所有流量,只会解密被声明的流量。

  • 可以使用像 *、? 这样的通配符。

  • 使用 - 排除域名。

  • 默认情况下,只会解密 443 端口的请求。

    • 添加 :port 来解密其他端口的 HTTPS 流量。

    • 添加 suffix :0 来解密所有端口的 HTTPS 流量。

Example:

  • -*.apple.com: 排除所有通过 443 端口发送给 *.apple.com 的请求。

  • www.google.com: 解密通过 443 端口的 www.google.com 的 HTTPS 流量。

  • www.google.com:8080: 解密通过 8080 端口的 www.google.com 的 HTTPS 流量。

  • www.google.com:0: 解密所有端口的 www.google.com 的 HTTPS 流量。

  • *:0: 解密所有的 HTTPS 流量。

如果有多条,可以像下面这样写:

hostname = -*.apple.com, -*.icloud.com, *

某些程序有着严格的安全策略,不会认可自己生成的证书。此时,使用解密的话可能会导致一些问题。

选项

tcp-connection

默认情况下,MitM 只会解密通过 Surge HTTP 代理的流量。如果使用 tcp-connection 选项,Surge 则会通过使用 VIF(增强模式)对原始 TCP 流量进行解密。但这样你仍然需要在 hostname 列表中声明解密的域名。

skip-server-cert-verify

MitM 时不验证证书。