首页/安全/漏洞与攻击面速查/openssl 快速核查证书与到期时间
扫描与验证方法50 条

openssl 快速核查证书与到期时间

不安装额外工具时,openssl s_client 可快速读取线上证书的主题、签发者、有效期;配合监控脚本可做证书到期预警。

漏洞与攻击面速查安全更新于 2026-10-13

openssl 证书核查是什么

不安装额外工具,用 openssl s_client 就能从线上读取证书的主题、签发者、有效期与 SAN 扩展,再配合 x509 解析输出,可以做证书到期预警与部署差错排查。这项检查有两个容易出错的细节:一是必须显式指定 SNI,否则多域名共用 IP 时会取到默认站点的证书;二是要关注链完整性,自签名或中间证书缺失的站点在部分客户端上会直接报错。

基本信息

适用平台Linux、macOS(Windows 可用 WSL 或 Git Bash)
关键参数-connect 目标、-servername 指定 SNI、-showcerts 输出完整链
解析工具openssl x509 -noout 配合 -subject / -issuer / -dates / -ext
常见用途到期预警、链完整性核查、部署变更后确认生效

典型使用场景

  • 证书更换后确认线上已生效,而不是只确认了文件已上传
  • 批量核查多个域名的剩余有效期,生成到期预警清单
  • 排查某客户端报证书错误:确认链是否完整、SNI 是否正确
  • 核对证书 SAN 列表,确认新增子域已被覆盖
  • 监控脚本中作为证书到期告警的数据来源

证书信息读取

证书信息读取
# 读取线上证书的主题、签发者、有效期与 SAN
echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates -ext subjectAltName

# 查看完整证书链(判断中间证书是否缺失)
echo | openssl s_client -connect example.com:443 -servername example.com -showcerts 2>/dev/null | head -40

# 检查验证结果与错误
 echo | openssl s_client -connect example.com:443 -servername example.com 2>&1 \
  | grep -E 'Verify return code|verify error'

到期检查脚本片段

到期检查脚本片段
END=$(echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -enddate | cut -d= -f2)

# 转为时间戳,与当前时间比较得出剩余天数
date -d "$END" +%s        # GNU date
# macOS 用:date -j -f '%b %d %T %Y %Z' "$END" +%s
# 剩余天数低于阈值即告警

输出字段读法

字段含义异常表现
subject证书主题(CN)与访问域名不一致
issuer签发机构与预期 CA 不符需复核
notAfter到期时间剩余天数低于预警阈值
subjectAltName覆盖的域名列表缺少实际使用的域名
Verify return code链验证结果非 0 表示链或信任问题
SNI 必须显式指定:多域名共用同一 IP 时,不指定会取到默认站点的证书,据此得出的结论可能是另一个域名的。
证书检查只反映握手层面的情况:证书正确不代表服务正常,变更后还应做一次业务请求验证。

易错点

  • 未加 -servername 导致核查了错误的默认证书,真实站点证书过期未被发现
  • 只检查证书文件不看线上握手:文件已更新但服务未重载或未生效
  • 忽略链完整性:中间证书缺失时部分客户端报错,而在服务器本地测试正常
  • 到期检查依赖人工执行:没有纳入监控的证书迟早会在假期里过期

数据来源与参考

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