SSL 握手失败的六大原因与对应解法
SSL 问题的本质大多是证书信任:不同系统、不同应用的验证策略不一样,没有万能解。官方建议的顺序是——先把 CA 证书安装这关过了(电脑端 / Android / iOS),再看下面六种情况。
1. 手机流量在电脑上 SSL 错误
手机端独立模式抓包正常,协同模式下电脑无法解析 SSL——说明电脑端的 CA 证书没有装到手机上。协同模式会自动同步证书,重新连接一次即可(见 扫码连接协同设备)。
2. 应用内置 CA Store
有些应用出于安全考虑自带 CA 验证库、不读系统证书库,装系统证书对它无效。最典型的是 Firefox(好在提供了导入开关,见下一篇)。没有提供方案的应用只能等开发商处理——这是安全设计的正常边界。
3. 固定证书(SSL Pinning)
应用钉死了服务器证书,中间人签发证书过不了验证。如果你拥有服务器的 SSL 证书(公钥+私钥),可以配置到 Reqable 的 SSL 证书(服务端)中解决;没有私钥则无解。详见 SSL 高阶场景。
4. 双向验证(mTLS)
服务器要求客户端上传证书,Reqable 默认不出示。把你拥有的客户端 SSL 证书配置到 Reqable 的 SSL 证书(客户端)中即可。
5. Python 请求无法验证证书
Python requests 等网络库不读系统证书库,容易报证书验证失败。解法:在 Reqable 的 代理终端 里执行脚本,证书与代理问题一并解决。
6. NodeJS 请求无法验证证书
同上,Node 程序放进代理终端里运行。
分诊速查
| 现象 | 先怀疑 |
|---|---|
| 所有 HTTPS 全失败 | 证书没装好(回安装步骤) |
| 只有某个 App 失败 | 固定证书 / 内置 CA(第 2、3 条) |
| 手机协同模式失败、独立正常 | 电脑端证书没同步(第 1 条) |
| 只有脚本请求失败 | 第 5、6 条,走代理终端 |
最后提醒:SSL 策略随系统与应用版本持续变化,遇到新情况以官方最新文档与社区反馈为准。