全部排错手册
安全 / TLS更新于 3 分钟阅读 · 执行耗时因环境而异

TLS 证书过期或替换失败:安全恢复 HTTPS 的步骤

证书故障要先识别实际对外提供的证书,再处理续期、部署链路和 CDN 缓存。

维护者 Kevin · Ovalk

适用范围与前提

使用 OpenSSL 3.x 诊断 HTTPS;CDN 边缘证书与源站证书属于不同部署。

确认域名和 TLS 终止位置。仅在持有主机上检查私钥,不复制到工单;同时检查客户端时间。

示例不是可以直接粘贴的指令。请替换示例域名、路径、服务名和大写占位符。先收集证据;重载、回滚、清理及执行任务会改变系统状态,需批准影响范围与恢复计划。不要分享凭据或未脱敏日志。

常见症状

  • 浏览器提示 NET::ERR_CERT_DATE_INVALID 或证书名称不匹配
  • 监控在续期日后仍报证书将过期
  • 已有新证书但部分地区访问仍拿到旧证书

1. 从用户访问路径验证证书

不要只检查磁盘上的 pem 文件。使用目标域名和 SNI 从外部或边缘节点观察实际返回的序列号、有效期和签发者。

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null | openssl x509 -noout -subject -issuer -dates -serial

2. 检查证书链与部署位置

反向代理、负载均衡、CDN 与源站可能分别持有证书。确认证书文件和私钥匹配,fullchain 是否包含中间证书,再进行配置测试和优雅重载。

下方包含会改变系统状态的示例,执行前确认授权、范围及恢复方案。

openssl x509 -in fullchain.pem -pubkey -noout | openssl pkey -pubin -outform DER | openssl dgst -sha256
openssl pkey -in privkey.pem -pubout -outform DER | openssl dgst -sha256
nginx -t && systemctl reload nginx

3. 避免用跳过校验的方式止血

关闭客户端证书校验或临时回退到 HTTP 会扩大风险。若自动续期失败,记录 ACME challenge 的 DNS/HTTP 路径、权限与 DNS 传播时间,再修复自动化。

journalctl -u certbot --since "24 hours ago" --no-pager

解读证据

观察结果下一步检查
有效期正常但域名不匹配检查 SAN 与 SNI;其他域名的有效证书仍不适用于当前请求。
证书与私钥的公钥哈希不同两者不匹配,应停止部署并安全地查找正确私钥。
证书链校验失败检查中间证书与使用的信任库,有效期正常不能证明受信任。

说明性诊断案例

以下假设案例用于解释推理,并非客户真实事故,也不代表已在你的技术环境中测试。

源站证书已续期,访客却仍收到过期证书。如果 TLS 在负载均衡器终止,更新源站文件不会改变负载均衡器的证书。逐个比较实际提供的序列号,并在故障终止点部署新证书。

验证恢复

  • 使用正常验证证书的 HTTPS 客户端检查正式域名,确认域名、链与有效期,不使用跳过验证参数。
  • 对各 TLS 终止点复测并检查自动续期日志,确认后续续期链路可用。

回滚与停止条件

验证完成前保留原有效证书与私钥。只有原证书仍适用于域名且未过期时才能回退;否则需重新签发或切换健康终止点。

预防与长期修复

  • 至少在到期前 30、14、7 天告警,并从外部探测。
  • 续期后自动验证序列号和有效期,验证通过才清理旧证书。
  • 为 CDN、LB 和源站维护一份证书终止点清单。

参考资料与纠错

请使用与你安装版本匹配的文档。以下资料解释基础行为,命令仍需结合实际环境验证。

向 Kevin 提交更正,请附页面地址、版本与脱敏复现步骤。请查看编辑原则(英文)