date
related_level
slug
type
relate_date
summary
status
tags
category
last_updated
Nov 10, 2025 10:02 PM
是否已更新
orginal_page
是否推荐
概述
s_client工具是一个用于测试和调试 SSL/TLS 连接的命令行工具
s_client 报告结果仅代表建立连接,不代表证书完全正确,也不意味着证书配置正确
Verify return code: 0 (ok)表示证书验证正常
Verify return code: 20 (unable to get local issuer certificate)表示无法获取本地颁发者证书- 可以通过指定 CA 位置可以修正
openssl s_client -connect www.feistyduck.com:443 -CApath /etc/ssl/certs/openssl s_client -connect www.feistyduck.com:443 \ -CAfile /etc/ssl/certs/ca-certificates.crt
Verify return code: 62 (Hostname mismatch)表示主机名不适配
测试 TLS 连接
s_client 建立到 TLS 服务器的连接
openssl s_client -crlf \ -connect www.feistyduck.com:443 \ -servername www.feistyduck.com-connect选项用于建立 TCP 连接,可以是 IP 地址-servername选项用于指定主机名- OpenSSL 早期版本不会根据
-connect自动填充-servername - 如果是 IP 地址则必须提供
-servername -noservername选项可以在 TLS 握手中避免发送主机名信息
- 其他选项
-verify_hostname选项用于指定需要验证的主机名-starttls选项在建立 TLS 之前使用合适的协议而非 HTTPS,如-starttls smtp- 支持协议
smtp,pop3,imap,ftp,xmpp,xmpp-server,irc,postgres,mysql,lmtp,nntp,sieve,ldap- 部分协议需要搭配
-name选项,如 smtp 需要提供名称-name mail.example.com
s_client 测试 TLS 协议版本
- 可选项
-min_protocol,-max_protocol- 特定版本:
-ssl2,-ssl3,-tls1,-tls1_1,-tls1_2,-tls1_3 - 忽略某个版本:
-no_**
openssl s_client -connect www.example.com:443 -tls1_2
s_client 测试会话恢复和保存/读取会话状态
- 测试会话恢复
echo | openssl s_client -connect www.feistyduck.com:443 -reconnect 2> /dev/null | grep 'New\|Reuse'- 只关心特定输出,抛弃了标准错误输出
New, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256Reused, TLSv1.2, Cipher is ECDHE-RSA-AES128-GCM-SHA256
- 保存会话状态至
sess.pem openssl s_client -connect www.feistyduck.com:443 -sess_out sess.pem
- 复用
sess.pem会话状态文件 openssl s_client -connect www.feistyduck.com:443 -sess_in sess.pem
s_client 提取远程服务器证书
s_client默认只显示叶子证书,显示完整证书链需要提供-showcerts选项echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > feistyduck.crtecho | openssl s_client -showcerts -connect www.feistyduck.com:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > feistyduck.crt
- 配合 x509 工具显示详细的服务器信息及其SHA256指纹
echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | openssl x509 -noout -text -fingerprint -sha256
- 配合 x509 工具进一步提取证书指纹
- OpenSSL 默认以显示单个字节的格式输出证书,并使用冒号分隔它们
echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | openssl x509 -noout -fingerprint -sha256 | sed 's/://g' | tr '[:upper:]' '[:lower:]' | sed 's/sha256 fingerprint=//g'
s_client 通过 OCSP 检查证书吊销状态
通过 OCSP 检查证书吊销状态
获取要检查是否吊销的证书和颁发者证书
s_client 提取远程服务器证书
s_client默认只显示叶子证书,显示完整证书链需要提供-showcerts选项echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > feistyduck.crtecho | openssl s_client -showcerts -connect www.feistyduck.com:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > feistyduck.crt
- 配合 x509 工具显示详细的服务器信息及其SHA256指纹
echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | openssl x509 -noout -text -fingerprint -sha256
- 配合 x509 工具进一步提取证书指纹
- OpenSSL 默认以显示单个字节的格式输出证书,并使用冒号分隔它们
echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | openssl x509 -noout -fingerprint -sha256 | sed 's/://g' | tr '[:upper:]' '[:lower:]' | sed 's/sha256 fingerprint=//g'
- 通过比对证书链上下游的 Subject 和 Issuer 一步步往上回溯
- 通过 AIA(Authority Info Access)扩展属性获取 CA Issuers 地址或证书
CA Issuers - URI:http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt
确定 OCSP 响应程序的 URL
- 通过 x509 工具从证书中提取
openssl x509 -in fd.crt -noout -ocsp_uri
- 通过 AIA(Authority Info Access)扩展属性获取 OCSP 地址
OCSP - URI:http://ocsp.comodoca.com
提交 OCSP 请求并观察响应
openssl ocsp -issuer issuer.crt -cert fd.crt -url http://ocsp.comodoca.com -CAfile issuer.crt- 部分服务器不处理 nonce,此时需要添加
-no_nonce选项 - 返回 404 时尝试在 header 中添加主机名,如
-header Host ocsp.comodoca.com
由客户端发起,要求服务器证书附带 OCSP 响应以证明其有效性
- 需要客户端在握手阶段提交
status_request扩展 openssl s_client -connect www.feistyduck.com:443 -status
服务器不一定支持 OCSP 响应
- 不支持的情况下显示
OCSP response: no response sent
- 支持则会显示完整响应结果
s_client 通过 CRL 检查证书吊销状态
获取要检查是否吊销的证书和颁发者证书
s_client 提取远程服务器证书
s_client默认只显示叶子证书,显示完整证书链需要提供-showcerts选项echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > feistyduck.crtecho | openssl s_client -showcerts -connect www.feistyduck.com:443 2>&1 | sed --quiet '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > feistyduck.crt
- 配合 x509 工具显示详细的服务器信息及其SHA256指纹
echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | openssl x509 -noout -text -fingerprint -sha256
- 配合 x509 工具进一步提取证书指纹
- OpenSSL 默认以显示单个字节的格式输出证书,并使用冒号分隔它们
echo | openssl s_client -connect www.feistyduck.com:443 2>&1 | openssl x509 -noout -fingerprint -sha256 | sed 's/://g' | tr '[:upper:]' '[:lower:]' | sed 's/sha256 fingerprint=//g'
- 通过比对证书链上下游的 Subject 和 Issuer 一步步往上回溯
- 通过 AIA(Authority Info Access)扩展属性获取 CA Issuers 地址或证书
CA Issuers - URI:http://crt.comodoca.com/COMODORSADomainValidationSecureServerCA.crt
确定 CRL 的 URL
- 通过 x509 工具从颁发者证书中提取
openssl x509 -in fd.crt -noout -text | grep -A 5 CRLURI:http://crl.comodoca.com/COMODORSADomainValidationSecureServerCA.crl- 一般处于 X509v3 CRL Distribution Points 部分中
获取有效 CRL
wget http://crl.comodoca.com/COMODORSADomainValidationSecureServerCA.crl -O comodo.crl
- 使用颁发者证书验证 CRL 是否有效
openssl crl -in comodo.crl -inform DER -CAfile issuer.crt -noout
确定需检查证书的序列号并在 CRL 中查找
openssl x509 -in fd.crt -noout -serial
openssl crl -in comodo.crl -inform DER -text -noout | grep F47F09B599124B1F08846AC4D71EB0F2
openssl crl -in comodo.crl -inform DER -text -noout- 转换成人类可读的格式并肉眼查找
- Author:白鸟3
- URL:https://blog.kun2peng.top/internet/openssl_s_client_test
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
