Surge 在最新的版本中加入了解密 HTTPS 流量的支持(即 Man-in-the-middle attack 简称 MitM)。不过在 Mac 上配置起来稍微有一点复杂,以下是配置步骤:

iOS 版本将会将会集成 CA 证书生成与安装向导,所以尚未完工

  1. 打开 Keychain Access.app
  2. 选择菜单项 Keychain Access -> Certificate Assistant -> Create Certificate Authority…
  3. 配置证书参数(名字邮箱随意填写)
Image for post
Image for post

4. 证书创建后,在左侧选择 My Certificates,然后在右侧列表中找到该证书,右键点击证书,选择导出,导出格式选择为 .p12 格式,导出时需要设置 passphrase,不可设置为空。若不可选择 p12 格式,请确认先切换到 My Certificates 后再进行导出。

5. 将证书拖动到左侧 Keychains 列表中的 System 中 (不做该步骤会使得 Safari 不认该 CA,不过 Chrome 可以正常工作)

Image for post
Image for post

6. 双击证书,将该证书标记为可信,关闭窗口输入登录密码确认操作。

7. 将得到的 Certificates.p12 文件进行 base64 编码

$ base64 Certificates.p12

8. 编辑 Surge 的配置文件,加入 MITM 段

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

9. 保存重启 Surge,对于 host 段指定的主机名,将进行 MitM 解密。解密后,Header / Body Dump 功能将可以正常工作。URL Rewrite 规则中,302 类型的规则将能够被执行。

注 1 :

这里 hostname 中的 * 通配符的工作方法与其它地方略有不同(如 Local DNS Mapping),进行的是简单的字符串后匹配。

即 *facebook.com 可对 facebook.com,www.facebook.com,abcfacebook.com 生效。

最终版本具体按照怎样的策略进行匹配待定。

注 2 :

部分应用使用了 Certificate Pinning,只相信特定的证书或者来自特定的 issuer 的证书。该情况下 MitM 无法正常工作。(如 iOS 系统对 apple.com 和 icloud.com 的相关请求)

虽然支持以 hostname = * 的写法向所有 https 连接进行 MitM,但是由于进行 MitM 开销很大,请仅向需要的主机名启动。

iOS Freelance Developer, Technical Advisor

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store