跳到主要内容

自定义证书(Custom Certificates)

在 Proxyman 中添加自定义根证书、服务器证书和客户端证书,用于 SSL Pinning 和双向 TLS,并生成 Apple 信任的自签名根证书。

1. 这是什么?​

Proxyman 支持自定义 Root Certificate(根证书)、Server Certificate(服务器证书)和 Client Certificate(客户端证书)。你可以添加自己的证书,Proxyman 会使用这些证书在客户端、服务器和 Proxyman 应用之间建立 SSL 连接。

自定义证书类型用途Proxyman 的使用方式
Server Certificate用于拦截使用 SSL Pinning 的客户端的 HTTPS 流量用此证书与你的客户端完成 SSL 握手
Client Certificate用于拦截使用双向认证(Mutual Authentication)的客户端的 HTTPS 流量用此证书与特定服务器完成 SSL 握手
Root Certificate用于在不使用本地 Proxyman 证书的情况下,拦截客户端和服务器的 HTTPS 流量与客户端和服务器完成 SSL 握手
Proxyman 自定义证书窗口,位于 Root Certificate 标签页,Proxyman CA 证书状态为 Installed & Trusted

Root Certificate 标签页

信息

Proxyman 根证书在你的 Mac 上本地生成。你也可以自行生成根证书并添加到 Proxyman 中。请参阅如何生成自签名根证书。

2. 证书格式​

Proxyman 支持以下格式:

自定义证书PEM 或 DERPKCS #12 (p12)
根证书不支持支持
客户端证书支持支持
服务器证书支持支持
  • PKCS #12(p12)文件。
  • PEM 或 DER 格式的私钥和证书文件。
信息
  • Proxyman 会自动识别私钥和证书文件的格式(PEM 或 DER)。
  • 导入加密的私钥或 PKCS #12 文件时,Proxyman 会要求输入密码。
  • 所有口令都会安全地存储在 Proxyman Keychain 中。
信息

如果你的证书格式不受 Proxyman 支持,请在导入前将其转换为 p12 或 PEM/DER 格式。

3. macOS 10.15+ 和 iOS 13+ 上的证书要求​

如果你在 macOS 10.15 或更高版本,或 iOS 13 或更高版本上使用自定义根证书或服务器证书,除非证书满足以下要求,否则 Safari 或 iOS 设备上的 SSL 握手可能会失败:

  • RSA 密钥的长度必须为 2048 位或以上
  • 哈希算法必须属于 SHA-2 系列
  • 服务器的 DNS 名称必须位于 Subject Alternative Name(SAN)中,Common Name(CN)已不再被信任
  • 证书必须在有效期内(当前日期需介于 Not Before 与 Not After 之间)
  • TLS 服务器证书必须包含 ExtendedKeyUsage(EKU)扩展,且其中包含 id-kp-serverAuth OID。

延伸阅读:iOS 13 和 macOS 10.15 中受信任证书的要求

信息

如果觉得这些步骤太复杂,可以让 Proxyman 代为完成。打开 Certificate 菜单 -> Install Certificate on this Mac…,然后选择 Automatic 标签页。

4. 常见问题​

问题解决方法
私钥与证书不匹配尝试其他证书和私钥,并确认两者相互匹配
自定义证书出现 SSL 握手错误
  • 尝试将自定义证书添加到 System Keychain 并信任它
  • 证书不满足 macOS 的要求 => 请阅读 第 3 节
  • 检查证书的有效期
因口令无效而无法导入证书向团队负责人索取正确的口令,以打开加密的私钥或 P12 文件

5. 使用方法​

  • 打开 Certificate 菜单 -> Add Custom Certificates…

6. 如何生成符合 Apple 新安全要求的自签名自定义根证书​

由于 Apple 针对 iOS 13 和 macOS Catalina (10.15) 的要求,你需要进行一些额外配置,才能生成可正常使用的自签名证书。

请按照以下步骤操作:

  1. 在 Desktop(桌面)文件夹中创建 cert.config 文件
[ ca ]
default_ca = CA_default
[ CA_default ]
default_md = sha256
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
keyUsage=critical,keyCertSign
extendedKeyUsage = serverAuth,clientAuth
[ req ]
prompt = no
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
C=US
L=US
O=Proxyman LLC
CN=proxyman.dev
OU=Proxyman
  • 更新 C、L、O、CN 和 OU 参数的值。

2. 在 Terminal 应用中生成 RSA 密钥。(将 your_password 替换为任意密码,例如 123456)

cd ~/Desktop
openssl genrsa -aes256 -passout pass:your_password -out key.pem 2048

3. 生成自签名证书和私钥。(将 your_password 替换为第 2 步中设置的密码)

openssl req -x509 -new -nodes -passin pass:your_password -config cert.config -key key.pem -sha256 -extensions v3_ca -days 825 -out root-ca.pem

4. 转换为 p12 格式。(将 your_password 替换为第 2 步中设置的密码)

openssl pkcs12 -export -legacy -out root-ca.p12 -in root-ca.pem -inkey key.pem -passin pass:your_password -passout pass:your_password

5. 此时你已获得 root-ca.p12 文件,请继续下一步。

信息

如果你在 macOS 14(OpenSSL v3)或更高版本上无法导入自定义证书,请在第 4 步中使用 `-legacy` 参数。

参考资料:PKCS12 导入时出现 MAC verification failed(Stack Overflow)

7. 作为自定义根证书导入​

  1. 打开 Certificate 菜单 -> Add Custom Certificates…,然后选择 Root Certificate 标签页
  2. 点击 Import 按钮 -> Import P12...
  3. 选择 root-ca.p12 文件,并输入密码。
  4. 在 Keychain Access(钥匙串访问)应用中信任你的自定义证书:
  • 打开 Keychain Access 应用
  • 搜索你添加的证书。证书名称可能是其 Common Name(CN)
  • 双击打开证书,然后选择 Always Trust
  • 关闭窗口以保存更改
macOS Keychain Access 证书窗口,信任设置为 Always Trust

5. 确认出现绿色对勾,表示证书已安装并受信任。

8. 作为服务器/客户端证书导入​

对于自定义服务器证书或客户端证书,请勿生成自签名证书。请向同事或团队负责人索取公司使用的证书,格式可以是 DER/PEM 或 P12。

然后在自定义证书窗口的 Server Certificates 或 Client Certificates 标签页中导入该证书。

Proxyman 证书导入面板,已选择 PEM 证书文件和私钥文件
信息

由于它不是根证书,因此无需在 System Keychain 中信任该证书。

了解更多​