certificate-expired
TLS 证书过期的定位与修复
现象
浏览器提示证书已过期,客户端报 certificate has expired or is not yet valid。openssl 查看 notAfter 已经早于当前时间。
快速定位
openssl x509 -in cert.pem -noout -subject -issuer -dates
openssl s_client -connect <host>:443 -servername <host> 2>/dev/null \
| openssl x509 -noout -dates
curl -v https://<host>/
date -u
certbot certificates
certbot renew --dry-run
常见根因
- 忘记续期,或自动续期任务没有运行。
- ACME 验证失败:DNS、80/443 端口、防火墙或限流。
- 服务器时间错误,导致证书被判断为未生效或已过期。
- 更新了证书文件但没有重载服务。
- 多台机器/多个副本中只更新了一部分。
修复
- 先确认证书到期时间和服务器时间,排除时钟问题。
- 手动续期并检查 certbot/acme.sh 日志,修复验证失败原因。
- 续期后重载 Nginx/Apache/网关,确认实际提供的证书已更新。
- 检查所有副本、负载均衡和 CDN 是否同步更新。
- 加到期监控(30/14/7 天告警),不要只依赖自动续期。
- 保留回滚用的旧证书和私钥,注意权限。
相关命令
openssl — 查看证书有效期
certbot — 申请与续期
systemctl — 重载服务
curl — 验证线上证书
读完自测
合上页面,先回答,再展开对照。
- 客户端报证书过期时,先确认哪两件事?
- 自动续期失败的常见原因有哪些?
- 续期成功后为什么仍可能报过期,如何验证?
答案
- 用
openssl 查看 notAfter,并用 date -u 核对服务器时间,排除证书确已过期或时钟错误。
- ACME 验证失败(DNS、80/443 端口、防火墙或限流),或自动续期任务根本没有运行。
- 可能没有重载服务,或只更新了部分副本/CDN;需重载 Nginx/Apache/网关,并用
openssl s_client 或 curl -v 验证线上证书。