首页/安全/加密与证书速查/证书到期检查(openssl -checkend)

证书到期检查(openssl -checkend)

用 openssl x509 的 -enddate 与 -checkend 检查证书剩余有效期:-checkend 以秒为单位判断证书是否会在指定时间内到期,退出码可直接用于巡检脚本的告警分支。

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

证书到期检查怎么做

openssl x509 提供两个直接的检查手段:-enddate 输出证书的到期时间,-checkend 以秒为单位判断证书是否会在指定时间内到期,并用退出码给出结论。把后者写进定时任务即可实现零依赖的到期巡检,既能检查本地文件,也能检查从线上服务抓取的证书。

基本信息

-enddate输出 notAfter 时间(UTC)
-checkend 秒数证书未在 N 秒内到期时退出码为 0,否则非 0
远端检查用 s_client 抓取线上证书后交给 x509 解析
适用对象本地证书文件、负载均衡节点、CDN 边缘节点
检查范围只判断时间,不校验链、域名与用途
常用阈值30 天(2592000 秒)作为告警线

典型使用场景

  • 日常巡检:定时检查站点证书剩余有效期并提前告警
  • 发布前检查:上线前确认新证书有效期覆盖整个业务周期
  • 多节点排查:逐个节点抓取证书,找出未同步更新的实例
  • CDN 与负载均衡:核对边缘节点证书与源站是否一致
  • 自动化续期验证:续期完成后用同一命令确认生效

检查本地与远端证书

检查本地与远端证书
# 查看到期时间(UTC)
openssl x509 -in cert.pem -noout -enddate
# 30 天内到期则告警
openssl x509 -in cert.pem -noout -checkend 2592000 && echo OK || echo 即将到期
# 抓取线上证书并检查有效期(多站点需带 SNI)
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -dates
# 对线上证书做同样的阈值判断
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -checkend 604800 && echo 一周内无到期风险
# 批量巡检多个域名
echo 'example.com api.example.com' | tr ' ' '\n' | while read d; do echo -n "$d "; openssl s_client -connect $d:443 -servername $d </dev/null 2>/dev/null | openssl x509 -noout -checkend 2592000 && echo ok || echo soon; done

检查项与局限

检查项命令局限
到期时间-enddate不校验链与域名
是否临期-checkend N只判断时间窗口
主体与 SAN-subject -ext subjectAltName需人工比对访问域名
链完整性s_client -showcerts 数张数不反映客户端信任库差异
实际生效证书s_client 抓取负载均衡可能有多个后端
-checkend 只回答时间问题:证书没过期不等于配置正确,链不完整或域名不匹配时它依然返回 0。到期巡检应对实际对外提供服务的证书执行,并与链检查、域名检查分开列为独立巡检项。
检查对象要覆盖全链路:源站、负载均衡、CDN 边缘、API 网关与邮件服务的证书都可能各自独立。仅检查本地文件是常见的漏检来源,应从外部按域名逐个抓取核对。

易错点

  • 只检查本地证书文件:负载均衡与 CDN 上实际使用的证书未纳入,出现「本地看着正常但外网已过期」
  • 把 -checkend 返回 0 当成证书整体有效:链与域名问题不在检查范围内
  • 告警阈值过短:临期一两天才告警,来不及走审批与签发流程,建议留出数周余量
  • 批量巡检未带 SNI:多站点服务器上抓到默认站点证书,检查对象完全错了
  • 续期后不做验证:新证书未真正加载或未同步到全部节点,需要重新抓取确认

数据来源与参考

  • OpenSSL 官方文档(x509 命令)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌