Surge MitM 证书的创建和配置

Surge MitM 证书的创建和配置

Surge 新版本中支持 MitM(即 Man-in-the-middle attack 简称 MitM,用于解密 HTTPS 的流量),需要自建证书并在配置文件中增加相应的 MitM 参数。整个过程分成几个部分:创建自签名根证书、导出证书为 .p12 格式的文件、生成 base64 编码、复制编码内容到配置文件。

创建证书

  1. 在「应用程序-实用工具」打开「钥匙串访问」;
  2. 由菜单项中选择「证书助理-创建证书颁发机构…」;
  3. 给证书命名,并创建证书。例如命名为:Surge MitM,身份类型选择「自签名根 CA」,证书类型选择「SSL 服务器」;

4. 双击打开刚创建的证书,修改信任为「始终信任」;

macOS beta 版无法保存证书的信任,可导出为 cer 文件后用命令行导入来解决。
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain certificate.cer

5. 将证书拖拽到钥匙串分类的「系统」中,此时会提示输入管理员密码以保存到系统证书目录;

导出证书

  1. 检查证书的信任是「始终信任」;
  2. 钥匙串访问左侧的列表中,钥匙串部分选择「系统」,下方的「种类」选择「我的证书」,在这种状态下选择右侧显示 Surge MitM 证书文件,由菜单选择「导出项目」;

3. 选择导出格式为 .p12,为导出的证书命名,并保存到你的用户目录下;

4. 保存 p12 证书时,会提示你为证书设置一个密码,这个密码也就是 Surge 配置文件中对应的 ca-passphrase。

生成 base64 编码

要在 Surge Mac 的配置文件中使用证书,需要对保存出来的 Certificates.p12 文件进行 base64 编码。

因为上个步骤中 p12 的文件我们直接保存在用户目录下,所以打开终端程序不用输入具体的路径,直接输入`base64 Certificates.p12`

复制编码内容到配置文件

命令执行后,我们会看到生成的一长串编码,复制它们粘贴到 Surge MitM 对应配置字段 ca-p12 中。为了美观,建议将 MitM 参数整个放在配置文件的最后。

[MITM]
enable = true
hostname = *facebook.com, *pinboard.in
ca-passphrase = xb160727
ca-p12 = MIIJtQIBAzCCCXwGCSqGSIb3DQ…..

配置范例中 hostname 的部分只定义了 facebook 和 pinboard.in,这里 hostname 中的 * 通配符的用法比较特殊,是字符串后匹配方式,即 *facebook.com 对应 facebook.com,www.facebook.com,abcfacebook.com。

对 https 连接进行 MitM 有一定的内存开销,所以推荐仅向需要的主机名启用。解密后,Surge Dashboard 中针对 HTTPS 的访问部分 Header/Body Dump 功能将可以正常工作,另外 URL Rewrite 规则中 302 类型的规则能够被执行。

如何知道 MitM 已经生效了呢?访问 facebook.com,点击网址前的小锁🔒标志显示证书,能看到如下的证书显示。

Surge iOS 中安装配置包含的证书

如果 iOS 版的 Surge 和 Mac 版是通过 iCloud Drive 共享配置,配置好 MitM 的配置文件同步到 Surge for iOS 后还需要多走一步,将证书安装到 iOS 的系统中。

打开 Surge for iOS 的 Config 页面,选择 Edit Configuration,滑动到配置页面底部,点击 HTTPS Decryption 进入 HTTPS 的配置页面。

因为配置文件中已经包含 Mac 上配置好的证书的 base64 编码内容,所以界面上你能看到 Surge MitM 的证书,只不过这里还不被系统信任(Not Trusted by System),点击 Install CA to System,按照向导安装描述文件到系统就可以了。

描述文件安装后,只要 Surge Mac 上的证书不变更,Surge iOS 上以后不用重新配置。

考虑到有些用户没有 Surge Mac,只有 Surge iOS,所以 Surge iOS 中自带证书创建的选项「Generate A New CA Certificate」,比较起来 iOS 中创建证书要简单的多,点击「Generate A New CA Certificate」就可以了。需要注意的是,如果已经安装好证书(不管是来自 Mac 还是在 Surge iOS 中先前创建的),点击创建证书将废弃现有的证书。

关于 Surge MitM,作者 @Yachen Liu 的文章链接: Surge MitM