Let's Encrypt 续签出现 rate limited 错误码 429 该如何解决?

文章导读
遇到 429 错误先停掉自动续签脚本,确认触发了哪种速率限制,大多数情况需要等待限制重置而不是强行重试。
📋 目录
  1. A 识别错误日志
  2. B 立即停止自动重试
  3. C 查询限制重置时间
  4. D 使用测试环境验证
  5. E 验证续签结果
  6. F 常见坑与注意事项
  7. G 参考来源
A A

遇到 429 错误先停掉自动续签脚本,确认触发了哪种速率限制,大多数情况需要等待限制重置而不是强行重试。

先说结论:这是 Let's Encrypt 的保护机制,强行重试只会延长解封时间。

  • 先确认日志里的具体限制类型
  • 先处理停掉定时任务避免累积失败
  • 再验证等待重置后手动执行一次

识别错误日志

不同客户端报错信息略有差异,以下是典型的 429 速率限制日志片段,请对照确认:

Certbot 日志示例:

Failed authorization procedure. yourdomain.com (http-01): urn:ietf:params:acme:error:rateLimited :: Error creating new authz :: Too many requests (429)

Acme.sh 日志示例:

code=429, error={"type":"urn:ietf:params:acme:error:rateLimited","detail":"Too many requests"}

立即停止自动重试

触发限制后,首要任务是停止所有自动任务,防止失败计数累积导致解封时间延长。

Let's Encrypt 续签出现 rate limited 错误码 429 该如何解决?

1. 禁用 Cron 任务:

sudo crontab -e
# 注释掉包含 certbot renew 或 acme.sh 的行

2. 禁用 Systemd Timer(以 Certbot 为例):

sudo systemctl disable `--now` certbot.timer

查询限制重置时间

Let's Encrypt 响应头中通常包含 Retry-After 字段,告知何时可以重试。429 错误响应中会明确包含该信息。若需查看当前 API 限额状态,可使用 curl 命令:

curl -I https://acme-v02.api.letsencrypt.org/directory

观察返回头中的 RateLimit-LimitRateLimit-Remaining。在限制重置前不要发起任何新请求,否则计时器可能重新计算。

Let's Encrypt 续签出现 rate limited 错误码 429 该如何解决?

使用测试环境验证

等待重置时间过后,不要直接生产环境重试。先使用 Staging 环境验证配置是否正确,避免再次消耗生产配额。

Certbot 测试命令:

sudo certbot renew `--dry-run`

Acme.sh 测试命令:

acme.sh `--issue` `--staging` -d yourdomain.com

验证续签结果

测试通过后,正式执行续签。完成后检查证书有效期是否更新:

echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

常见坑与注意事项

  • 不要在生产环境反复测试:每次失败都会消耗验证失败配额,建议全程使用 Staging 环境调试。
  • 配额共享:通配符证书和普通证书的限制是分开计算的,但同一注册域名下的证书颁发数量共享配额。
  • 客户端共享配额:如果使用了多个 ACME 客户端(如同时用 certbot 和 acme.sh),它们会共享同一个域名的配额,避免混用。
  • IP 限制:除了域名限制,Let's Encrypt 也对 IP 地址有请求频率限制,频繁更换 IP 重试可能触发新的限制。

参考来源

Let's Encrypt Rate Limits - https://letsencrypt.org/docs/rate-limits/