安全 / 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 -serial2. 检查证书链与部署位置
反向代理、负载均衡、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 nginx3. 避免用跳过校验的方式止血
关闭客户端证书校验或临时回退到 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 提交更正,请附页面地址、版本与脱敏复现步骤。请查看编辑原则(英文)。