首页/安全/加密与证书速查/套件协商失败排查
本包目录(305 条)
加密算法基础95 条
TLS 与 HTTPS60 条
证书与 PKI30 条OpenSSL 实战30 条证书运维排查49 条密钥管理41 条

套件协商失败排查

报 no shared cipher 或 handshake failure 说明客户端与服务端没有共同套件:TLS 1.2 用 -cipher 指定组合、TLS 1.3 用 -ciphersuites 指定,可分别验证版本与套件层面的交集。

加密与证书速查安全更新于 2026-10-12
no shared cipherTLS 1.2 场景多见,检查服务端套件配置是否排除了客户端需要的组合
wrong version number对端可能是明文服务或协议栈不匹配
排查顺序先协议版本交集,再套件交集,最后证书与签名算法

分别测试两个版本的套件

分别测试两个版本的套件
openssl s_client -connect example.com:443 -servername example.com -tls1_2 -cipher 'ECDHE-RSA-AES128-GCM-SHA256' </dev/null 2>&1 | grep -i 'cipher\|alert'
openssl s_client -connect example.com:443 -servername example.com -tls1_3 -ciphersuites TLS_AES_128_GCM_SHA256 </dev/null 2>&1 | grep -i 'cipher\|alert'
OpenSSL 3.x 中部分旧算法受 provider 控制,测试端与生产端都可能因未启用 legacy 而结果不同。

易错点

  • 把 TLS 1.3 套件填入 -cipher 参数(对该版本无效)
  • 只测默认套件,不构造客户端实际使用的组合

数据来源与参考

  • OpenSSL 官方文档(s_client -cipher / -ciphersuites)
  • RFC 8446 §9.1(TLS 1.3 套件)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌