续期失败怎么排查
ACME 续期失败基本集中在三类原因:HTTP-01 挑战路径不可达、DNS-01 记录未生效或权限不足,以及限流与解析问题。相比反复重试,按错误类型逐步验证挑战路径更有效。核心思路是先在本地复现 CA 会做的检查,确认路径与内容都能被正常访问,再去看客户端与服务端的日志。
基本信息
| 挑战类型 | HTTP-01 走 80 端口路径校验,DNS-01 校验 TXT 记录 |
|---|---|
| 常见错误 | unauthorized(校验失败)、DNS problem、rateLimited |
| 预演方式 | certbot renew --dry-run;签发前用 --staging 验证流程 |
| 日志位置 | 客户端日志与服务端访问日志要一起看 |
| 拦截因素 | WAF、CDN 与重定向都可能破坏校验 |
| 告警要求 | 续期失败必须告警,不能静默重试 |
典型使用场景
- 排查续期告警:先看错误类型再定位具体路径
- 变更后回归:站点根目录或反代规则调整后重新演练
- 迁移环境:更换服务器后确认挑战路径仍然可达
- 自动化改造:把续期失败纳入监控与值班流程
- 限流规避:连续失败后改用测试环境复现,避免进一步触发限制
排查命令
排查命令
# 查看本地已管理的证书与到期时间
certbot certificates
# 用测试环境演练完整续期流程,不消耗生产配额
certbot renew --dry-run 2>&1 | tail -30
# 手工模拟 CA 的校验:确认路径可达且内容正确
curl -v http://example.com/.well-known/acme-challenge/testfile错误类型与处置
| 错误 | 原因 | 处置 |
|---|---|---|
| unauthorized | 挑战校验失败 | 检查校验路径的可达性与内容 |
| DNS problem | TXT 记录未生效或权限不足 | 等待传播并用查询命令确认 |
| rateLimited | 触发签发频率限制 | 改用测试环境演练 |
| 连接超时 | 出口或源站不可达 | 检查网络策略与解析结果 |
WAF 或 CDN 拦截 .well-known 路径、或把它跳转到其他域名,都会让 HTTP-01 校验失败;续期失败要触发告警而不是静默重试。
DNS-01 的关键是确认最终生效的记录:若使用 CNAME 指向其它域名,要等最终 TXT 记录可查询后再发起校验,否则会看到看似随机的失败。
演练要覆盖真实路径:在测试环境用 --dry-run 跑通一次,比在生产上反复试错的成本低得多,也能避免触发限流。