SSL 握手失败:11 种原因及修复方法
· CSR.plus 团队

- •握手失败几乎总能归结为 11 种原因之一:证书、密码套件、SNI、协议或网络层。
- •按顺序诊断:到期、主机名匹配、链完整性,然后是 TLS 版本与密码套件。
- •大多数握手失败可通过正确的中级链或受支持的密码套件修复。
握手失败时实际发生了什么
TLS 握手期间,客户端与服务器必须就协议版本、密码套件和有效证书链达成一致。任何一步失败都会终止连接。常见失败点包括:证书过期、主机名不在证书覆盖范围、链不完整(服务器只发送叶子证书而不含中间证书)、TLS 版本不受支持、密码套件不匹配、缺少 SNI,或防火墙/NAT 丢弃了 ClientHello。
一分钟内完成诊断
运行 openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 并阅读输出。"Verify return code: 0" 表示链正常。"unable to get local issuer certificate" 指向缺少中级证书。"no peer certificate available" 或 CONNECTED 后空行表示服务器从未完成握手——通常是协议或密码套件问题。浏览器控制台错误补充客户端视角。
5 种最常见原因的修复
1) 缺少中级证书:下载 CA 包,按正确顺序拼接叶子证书 + 中级证书。2) 密码套件不匹配:启用通用套件如 TLS_AES_256_GCM_SHA384(TLS 1.3)或 ECDHE-RSA-AES256-GCM(TLS 1.2)。3) TLS 版本:在服务器上启用 TLS 1.2 与 1.3,禁用低于 1.2 的版本。4) 主机名/SNI:确保证书包含确切主机名且已启用 SNI。5) 网络:检查 443 端口是否开放,确认负载均衡器或 CDN 没有用自己的设置终止 TLS。
FAQ
为什么浏览器握手失败但 curl 可以?
不同客户端支持的 TLS 版本和密码套件不同。如果 curl 正常而旧浏览器失败,说明客户端不支持协商的 TLS 版本——请启用 TLS 1.2 作为最低版本。
防火墙会导致握手失败吗?
会。某些防火墙和 NAT 设备会静默丢弃大型 ClientHello 包或阻断 TCP 端口。可用非标准端口测试或用抓包确认。
UptimeRobot
免费监控你的 SSL 与在线状态
UptimeRobot 全天候监视你的证书与端点——免费方案含 50 个监控。
联盟链接——你无需多付任何费用,我们可能获得佣金。
免费 SSL/TLS 工具
数秒内验证并检查你的证书。