证书签发和续期

too many certificates already issued:Let's Encrypt 速率限制

作者: · 最后核实

报错信息urn:ietf:params:acme:error:rateLimited: too many certificates (5) already issued for this exact set of identifiers in the last 168h0m0s, retry after ...

rateLimited 报错的意思是:你用完了 Let's Encrypt 的某一项签发额度,新账户、新订单或新证书请求被拒绝了。 最常见的情况是调试时反复为同一组域名重新签发证书,触发“同一组标识符每 7 天最多 5 张”的限制。

快速修复

额度用完后无法重置,只能等它按时恢复;期间先停止重试、装回已有的证书。报错原文写明了是哪个限制,以及 retry after 的时间(UTC)。然后:

  1. 停止重试。 每次失败都可能继续消耗额度。先停掉循环调用 ACME 客户端的 cron、CI 流水线或不断重启的容器。
  2. 用已有的证书。 Certbot 把签过的证书都留在 /etc/letsencrypt/archive/<名称>/,acme.sh 在 ~/.acme.sh/<名称>/。找出最新的有效证书装上。
  3. 到测试环境排错。 调通之前一直用 staging:
certbot certonly --staging -d example.com -d www.example.com
acme.sh --issue --staging -d example.com -w /var/www/html

原因

最常触发的是“相同标识符组合每 7 天 5 张”这一项。以下数字来自 Let's Encrypt 官方速率限制页面(页面最后更新于 2026 年 8 月 5 日)。限制会调整,一切以官方页面为准。

限制 额度 恢复速度 能否申请提额
相同标识符组合的新证书 每 7 天 5 张 每 34 小时 1 张 不能
每个注册域名的新证书 每 7 天 50 张 每 202 分钟 1 张 可申请
每个账户的新订单 每 3 小时 300 个 每 36 秒 1 个 可申请
每账户每标识符验证失败 每小时 5 次 每 12 分钟 1 次 不能
每账户每标识符连续验证失败 1,152 次 每天 1 次,成功一次即清零 在自助页面解除暂停
每个 IP 新注册账户 每 3 小时 10 个 每 18 分钟 1 个 不能
每个 IPv6 /48 新注册账户 每 3 小时 500 个 每 22 秒 1 个 不能

1. 重复签发(最常见)

  • 确认: 报错里有 “exact set”(完全相同的一组)字样。在 CT 日志查询里搜这个域名,能看到最近一周签了好几张域名完全相同的证书。
  • 常见原因: 每次部署都删掉 ACME 客户端的配置目录;Docker 容器没把 /etc/letsencrypt 挂到持久卷;测试时一直加 --force-renewal。
  • 修复: 等额度恢复,先用已有证书顶上,并把客户端的状态目录持久化。

2. 同一注册域名下证书太多

  • 确认: 报错提到的是注册域名(如 example.com),而不是完整的域名列表。通常是给大量子域名分别签证书导致的。
  • 修复: 把多个域名合并进少量证书(classic 配置下一张证书最多 100 个标识符);或用 DNS-01 签 通配符证书,国内 DNS 用 DNSPod、阿里云解析的 API 都能自动完成;托管商可以申请提额。

3. 反复验证失败

  • 确认: 报错提到 failed authorizations。要解决的是验证本身,见 certbot 连接超时、certbot 403 unauthorized、NXDOMAIN。
  • 修复: 先在 staging 上把验证调通。如果长期失败导致某个域名被暂停签发,报错里会带一个自助页面链接,在那里解除暂停。

4. 同一 IP 注册了太多账户

  • 确认: 报错是 “too many new registrations”。一般是脚本每签一张证书就注册一个新账户。
  • 修复: 注册一个账户,所有证书共用。

各环境修法

各 ACME 客户端的原则相同:只在证书进入续期窗口时续期,排错一律用 staging,失败后不要自动高频重试。

Certbot: certbot certificates 列出已有证书;certbot renew 只续期进入续期窗口的证书,所以 cron 里别加 --force-renewal。Docker 里把 /etc/letsencrypt 挂出来。

acme.sh: ~/.acme.sh 放在持久卷上;排错时用 --staging(或 --test),定时任务里去掉 --force。

宝塔 / 1Panel: 面板申请失败后不要连续点击重试。先在面板日志里看具体失败原因,排除后再申请。如果你同时又用命令行客户端给相同域名签证书,两边会互相“抢单”,订单数翻倍。

Kubernetes cert-manager: 卡在失败循环里的 Certificate 会持续消耗额度。先用 staging 的 ClusterIssuer 调到 Ready,见 cert-manager 证书一直不 Ready。

不要这样做

下面这些做法都不会退回额度,有的还会继续消耗额度或让访客看到警告。

  • 吊销后重签,想“重置”限制。 吊销不会退回额度。
  • 注册新账户绕过限制。 域名和重复证书限制是全局的,注册账户本身也有每 IP 限制。
  • 等额度期间给正式站点挂自签名证书。 访客会看到安全警告。宁可继续用旧证书,或临时换用客户端支持的其他 ACME CA。
  • 让坏掉的续期任务每几分钟跑一次。 在 staging 修好后,每天跑一两次就够。

常见问题

能找 Let's Encrypt 帮忙重置限制吗?

不能。官方速率限制页面写明没有临时重置的办法,吊销证书也不会退回额度。额度会随时间自动恢复,报错信息里的 retry after 就是可以重试的时间(UTC,北京时间要加 8 小时)。

续期也算在限制里吗?

通过 ARI 协调的续期不受任何速率限制。老式续期(申请完全相同的一组域名)不计入“每账户新订单”和“每注册域名证书数”,但仍计入“相同标识符证书数”和“验证失败次数”。

一周 5 张的重复证书限制用完了,网站已经挂了怎么办?

先找已经签发过的有效证书,比如 /etc/letsencrypt/archive/ 或 ~/.acme.sh/ 目录、宝塔的证书夹、备份里的文件,装回去。实在没有,就改变域名组合(比如加上 www.example.com),这会被当成新订单,改受每账户和每域名的限制。可以用 CT 日志查询看最近签了哪些证书。

宝塔面板一直申请失败,会不会把额度用完?

会。宝塔、1Panel 等面板失败后反复点“申请”,每次都会创建订单、消耗验证失败次数。先把失败原因(80 端口不通、域名解析不对、未备案被拦截等)排查清楚再申请。

测试环境的限制真的更高吗?

是的。Let's Encrypt 说明 staging 环境的限制明显更高,推荐开发和排错时使用。staging 签出的证书浏览器不信任,调通后要切回正式环境再签一次。

资料来源

  1. Let's Encrypt: Rate Limits
  2. Let's Encrypt: Staging Environment
  3. Let's Encrypt: Integration Guide
  4. Certbot User Guide