首页/安全/加密与证书速查/openssl s_client 检查清单
TLS 与 HTTPS60 条

openssl s_client 检查清单

s_client 是排查 TLS 的常用工具:可指定版本与 SNI、打印证书链、执行校验并请求 OCSP,几分钟内确认服务端安全配置的实际协商结果。

加密与证书速查安全更新于 2026-10-13

s_client 检查清单

openssl s_client 是排查 TLS 最顺手的命令行工具:可以指定协议版本、发送 SNI、打印服务端下发的完整证书链、执行校验并请求 OCSP 状态。它回答的是「实际协商结果是什么」,因此比翻配置文件更可信,适合上线前验证与故障定位。

基本信息

所属工具OpenSSL 命令行套件
核心用途按指定条件发起 TLS 连接并打印握手与证书细节
常用参数-connect、-servername、-showcerts、-verify_return_error、-status、-tls1_2/-tls1_3
关键输出Protocol、Cipher、Verify return code、证书链与有效期
退出码默认校验失败也可能返回 0,需加 -verify_return_error
配合命令管道给 openssl x509 解析证书字段

典型使用场景

  • 上线验证:确认服务端实际协商的协议版本与套件符合基线
  • 证书链排查:用 -showcerts 看服务端究竟下发了哪几张证书、顺序如何
  • 多站点排查:指定 SNI 确认虚拟主机选择了正确证书
  • 兼容性测试:分别用 -tls1_2 与 -tls1_3 测试不同客户端的协商路径
  • 到期巡检:抓取线上证书后交给 x509 检查有效期与扩展

常用组合

常用组合
# 完整握手信息 + 完整证书链(多站点必须带 -servername)
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
# 严格校验:校验失败直接以非 0 退出码结束,便于脚本判断
openssl s_client -connect example.com:443 -servername example.com -verify_return_error </dev/null
# 限定版本测试,确认实际协商到的协议
openssl s_client -connect example.com:443 -tls1_2 </dev/null 2>&1 | grep -E 'Protocol|Cipher'
# 请求 OCSP 装订响应,观察是否启用
openssl s_client -connect example.com:443 -servername example.com -status </dev/null 2>&1 | grep -A3 'OCSP'
# 只取证书字段用于巡检
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

输出关键项读法

输出项含义正常与异常
Protocol实际协商到的协议版本应为 TLSv1.2 或 TLSv1.3;出现 1.0/1.1 说明配置未收紧
Cipher协商到的套件应含 GCM/CHACHA20 与 ECDHE;出现 CBC 或静态 RSA 需整改
Verify return code证书校验结果,0 表示通过20 表示链不完整,62 表示域名不匹配,10 表示过期
subject / issuer叶证书主体与签发者subject 应与访问域名匹配
Server Temp Key临时密钥交换信息TLS 1.2 下出现说明具备前向保密
BEGIN CERTIFICATE 数量服务端下发的证书张数通常为 2 张(叶 + 中间),只有 1 张多半链不完整
不带 -servername 测试多站点服务器会拿到默认站点证书,结论完全不可信;校验失败时退出码仍可能是 0,脚本里必须显式加 -verify_return_error 或解析输出内容,否则会把失败当成通过。
末尾的 Verify return code 与 Protocol、Cipher 是最常看的三项:0 表示证书链校验通过,非 0 时按错误码归类(链、域名、有效期)再排查。用 -verify_hostname 或 x509 的 -checkhost 可以单独验证域名匹配。

易错点

  • 测试多站点服务器时不带 -servername:拿到默认站点证书,把配置问题误判为证书问题
  • 只看输出不判定退出码:默认情况下校验证书失败仍返回 0,自动化脚本会漏报
  • 用 s_client 的默认版本测试就下结论:必须显式指定版本,确认各版本的协商结果
  • 只数证书张数不看顺序:链顺序错误时部分客户端会拒绝,需核对叶证书是否在最前
  • 把 s_client 结果当作全部证据:它只反映单个客户端视角,还应结合外部扫描与真实客户端验证

数据来源与参考

  • OpenSSL 官方文档(s_client)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌