Support | 微信 & TG: @scomper

Surge MitM 证书的创建和配置

2018.10.30 09:02

Surge 新版本中启用 MitM(即 Man-in-the-middle attack 简称 MitM,用于解密 HTTPS 的流量)已经没有那么麻烦,整个过程因为有 UI 界面变得很简单,四个主要步骤就可以完成配置:生成证书、安装证书、证书信任、添加主机。

更简单的证书添加过程

Surge iOS 和 Surge Mac 上都可以发起证书的安装,只需要以一边为主,配置文件同步后另一边只需要「将证书安装到系统」即可。

这里以 Surge iOS 端添加证书为例:

  • Surge 首页点击 MitM 卡片上的「配置根证书」,在 HTTPS 解密解密中点击「生成新的 CA 证书」①;
  • 「安装证书」② 到系统,会跳转到描述文件安装界面 ③ ,选择允许,继续选择描述文件安装的设备 iPhone ④;

  • 确认描述文件的安装 ⑤ ⑥;
  • 打开「设置 - 通用 - 关于本机」,滑动到页面底部点击「证书信任设置」⑦ ,信任新添加的 Surge 证书

  • 回到 Surge 的 HTTPS 解密界面,可以看到证书下方已经显示为「系统已信任」 ⑧,至此 iOS 上的证书就添加完成了;
  • 证书配置完成后,启用 MitM 之前,还需要添加需要解密的网站主机 ⑨;
  • 添加你想访问并解密的网站的域名 ⑩;
  • 主机添加完成,就可以启用 MitM ⑪。

  • Surge iOS 端配置好证书以后,如果用文本编辑器查看配置文件,会发现最底部多了 【MITM】的部分,配置文件通过 iCloud 云盘同步到 Surge Mac 端之后,Surge Mac 只剩下「将证书安装到系统」这最好一步 ⑫。
  • 系统「应用程序 - 实用工具 - 钥匙串访问」中旧的 Surge 证书可以删除掉(注意对照证书的编号)。

最好验证一下 MitM 是否配置好,如果你已经按范例在主机中添加了我的博客域名 scomper.me,启用 MitM 的状态下试试在 Safari 中是否能访问,如果访问正常说明配置成功。


旧的 MitM 配置方式
date: 2016.07.27 09:34
整个过程分成几个部分:创建自签名根证书、导出证书为 .p12 格式的文件、生成 base64 编码、复制编码内容到配置文件。

创建证书

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

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

    sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain certificate.cer

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

导出证书

  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 参数整个放在配置文件的最后。


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

Comments
Write a Comment