自定义证书(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 握手 |

Root Certificate 标签页
Proxyman 根证书在你的 Mac 上本地生成。你也可以自行生成根证书并添加到 Proxyman 中。请参阅如何生成自签名根证书。
2. 证书格式
Proxyman 支持以下格式:
| 自定义证书 | PEM 或 DER | PKCS #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 握手错误 |
|
| 因口令无效而无法导入证书 | 向团队负责人索取正确的口令,以打开加密的私钥或 P12 文件 |
5. 使用方法
- 打开 Certificate 菜单 -> Add Custom Certificates…
6. 如何生成符合 Apple 新安全要求的自签名自定义根证书
由于 Apple 针对 iOS 13 和 macOS Catalina (10.15) 的要求,你需要进行一些额外配置,才能生成可正常使用的自签名证书。
请按照以下步骤操作:
- 在 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` 参数。
7. 作为自定义根证书导入
- 打开 Certificate 菜单 -> Add Custom Certificates…,然后选择 Root Certificate 标签页
- 点击 Import 按钮 -> Import P12...
- 选择 root-ca.p12 文件,并输入密码。
- 在 Keychain Access(钥匙串访问)应用中信任你的自定义证书:
- 打开 Keychain Access 应用
- 搜索你添加的证书。证书名称可能是其 Common Name(CN)
- 双击打开证书,然后选择 Always Trust
- 关闭窗口以保存更改
5. 确认出现绿色对勾,表示证书已安装并受信任。
8. 作为服务器/客户端证书导入
对于自定义服务器证书或客户端证书,请勿生成自签名证书。请向同事或团队负责人索取公司使用的证书,格式可以是 DER/PEM 或 P12。
然后在自定义证书窗口的 Server Certificates 或 Client Certificates 标签页中导入该证书。
由于它不是根证书,因此无需在 System Keychain 中信任该证书。