Surge HTTP 处理:HTTPS 解密

内容纲要

查看【Surge】专题可浏览更多内容

关于「HTTPS 解密」功能在官方的
《Surge 官方中文指引:理解 Surge 原理》的 章节 5 TLS,HTTPS 与 MITM 详细讲解了 TLS 和 HTTPS 的关系,TLS 的作用,以及怎样进行 MITM。

所以本文只阐述 MitM 的配置:

安装并信任证书

Surge HTTP 处理:HTTPS 解密

打开 Surge,在「首页」里找到「MitM」卡片,选择「配置根证书」

选择「生成新的 CA 证书」,然后选择「安装证书」,在安装后打开「跳过服务端证书验证」。

选择「安装证书」

Surge HTTP 处理:HTTPS 解密

  1. 「允许」下载配置描述文件;
  2. 进入系统「设置」里的「通用」;
  3. 在「通用」里的「描述文件」,安装「已下载的描述文件」;
  4. 在「通用」里的「关于本机」,选择「证书信任设置」并开启信任刚才安装的证书;

MitM 设置

[General]

[Rule]
FINAL,DIRECT

[MITM]
skip-server-cert-verify = true
ca-p12 = MIIJtQ.........
ca-passphrase = password
hostname = *google.com

Surge 仅会解密 hostname 指定的主机名的请求。

  • 可使用通配符 *?
  • 可使用前缀 - 将特定主机名排除;
  • 默认仅解密发往 443 端口的请求(可使用如 example.com:80 解密特定端口,或使用如 example.com:0 解密所有端口);
  • <ip-address> 表示匹配所有主机名为 IP 地址的连接;
  • <ipv4-address> 表示匹配所有主机名为 IPv4 地址的连接;
  • <ipv6-address> 表示匹配所有主机名为 IPv6 地址的连接;

iOS 系统和某些应用有严格的安全策略,仅信任某些特定的证书,对这些域名启动解密可能导致问题,如:*.apple.com*.icloud.com

例子

  • google.com:解密所有发往 google.com 上的 443 端口的请求;
  • google.com:8443:解密所有发往 google.com 上的 8443 端口的请求;
  • *.google.com:0:解密所有发往 google.com 及其子域名上所有端口的请求;
  • -google.com:不解密所有发往 google.com 上的 443 端口的请求;

跳过服务端证书验证

[MITM]
skip-server-cert-verify = true

用于 TCP 连接

[MITM]
tcp-connection = false

开启该选项后 Surge 将对 MitM 主机名列表中的 TCP 连接也进行 MitM 解密,如果该连接并非 HTTPS 请求将导致连接失败。

用于 HTTP/2

[MITM]
h2 = true

若需支持使用 HTTP/2 协议执行 MITM,以提高并发请求的性能,可在配置文件中添加上述示例。

仅特定设备启用 MitM

可以指定一个单一的IP地址或使用 CIDR 设置特定设备启用 MitM,均支持 IPv4 和 IPv6。

[MITM]
client-source-address = 0.0.0.0/0, ::/0

如针对某个设备不启用可使用 -client-source-address = -192.168.1.2, 0.0.0/0