大量域名同时续签如何避免触发 Let's Encrypt 速率限制报错?

文章导读
批量续签时,最稳妥的办法是改用 DNS 验证并错开任务执行时间,避免集中触发频率限制。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

批量续签时,最稳妥的办法是改用 DNS 验证并错开任务执行时间,避免集中触发频率限制。

先说结论:面对大量域名续签,单纯依赖 HTTP-01 验证极易撞上限流,建议切换 DNS-01 验证并将任务分散执行。

  • 适合:拥有多个子域或不同注册域名、使用宝塔或 acme.sh 管理的场景
  • 先准备:域名服务商 API 密钥(建议最小权限)、检查当前证书申请频次日志
  • 验收:确认新证书有效期更新且无 rateLimited 报错

命令速用版

若使用 acme.sh 配合 DNS 验证,可参考以下命令模板(以阿里云为例),避免使用默认的 HTTP 验证。建议先升级 acme.sh 至最新版本:

acme.sh `--upgrade`
export Ali_Key="你的 Key"
export Ali_Secret="你的 Secret"
acme.sh `--issue` `--dns` dns_ali -d example.com -d *.example.com
acme.sh `--install-cert` -d example.com \
`--key-file` /path/to/key.pem \
`--ca-file` /path/to/ca.pem \
`--cert-file` /path/to/cert.pem \
`--fullchain-file` /path/to/fullchain.pem \
`--reloadcmd` "service nginx reload"

若使用宝塔面板,需在计划任务中将续签脚本执行时间错开,避免同一分钟并发请求。

为什么会这样

Let's Encrypt 为了公平使用,设置了多层速率限制。根据官方策略,每个注册域名(Registered Domain)每周最多只能颁发约 50 张证书,而单个域名组合每周申请次数也有严格限制(如每周最多 5 次)。

当大量域名同时发起续签请求时,如果它们属于同一个注册域名(例如都是 example.com 的子域),很容易瞬间耗尽每周配额。此外,宝塔面板默认使用 HTTP-01 验证,若服务器 IP 被临时限制或 80 端口访问不稳定,也会触发验证失败,面板有时仅显示“申请失败”而不提示具体的限流错误代码。

分步处理

1. 检查当前配额使用情况
登录服务器,查看证书目录历史文件,确认近期申请是否过于密集。
宝塔用户可执行:ls -l | grep example.com 查看历史证书文件名里的日期戳是否集中在最近一周。

2. 切换为 DNS-01 验证
DNS 验证不依赖 80 端口,也不触发 HTTP-01 的频率限制。需在域名服务商处获取 API 密钥,并在 acme.sh 或宝塔配置中启用 DNS API。
安全建议:创建 RAM 子用户或 API Key 时,仅授予 DNS 解析记录修改权限,避免使用主账号密钥。
宝塔 8.x+ 内置了 acme.sh,但默认不暴露 DNS 配置入口,需手动补全环境变量。

3. 错开续签任务时间
不要将所有域名的续签计划任务设在同一时间(如凌晨 2:00)。建议将不同域名的续签时间分散到不同小时,例如 domain1 在 2:00,domain2 在 3:00,降低瞬时并发压力。

大量域名同时续签如何避免触发 Let's Encrypt 速率限制报错?

4. 清理残留配置(宝塔用户)
若续签失败且状态卡住,检查 /www/server/panel/config/letsencrypt.json 文件(路径可能因版本不同略有差异)。有时图形界面删除域名未同步删除该文件中的旧记录,导致续签逻辑冲突。
操作警告:删除前务必备份,执行 cp /www/server/panel/config/letsencrypt.json /www/server/panel/config/letsencrypt.json.bak,确认备份后再尝试删除该文件后重新申请证书。

怎么验证是否生效

1. 检查证书有效期
使用命令 openssl s_client -connect yourdomain.com:443 | openssl x509 -noout -dates 查看证书 Not After 时间是否已更新。

2. 查看续签日志
宝塔用户可在面板计划任务日志中查看是否有 rateLimitedtoo many certificates 错误。
acme.sh 用户查看 ~/.acme.sh/acme.sh.log
错误码解读:
- rateLimited:触发频率限制,需等待重置或更换验证方式。
- too many certificates:同一注册域名下颁发数量超限,需合并域名或等待下周。

3. 在线工具检测
使用 SSL 检测工具访问域名,确认证书链完整且未过期。

常见坑

1. 通配符证书误用 HTTP 验证
通配符证书(如 *.example.com)不支持 HTTP-01 验证,必须走 DNS-01。若宝塔默认自动续签走 HTTP 方式,会直接跳过或报错。

2. 自动续签死循环
宝塔默认开启自动续签,若某次因网络波动失败,后台可能不断重试,悄悄耗尽本周额度。建议失败后先手动干预,确认原因后再开启自动任务。

3. 服务器 IP 被限制
若同一 IP 频繁请求,可能被 Let's Encrypt 临时封禁。表现为连接超时或 forbidden。此时需更换 IP 或等待数小时至数天解除限制,也可切换 ZeroSSL 等替代 CA。

4. Python 环境路径错误
宝塔更新后可能调整 Python 虚拟环境路径,导致续签脚本找不到依赖库而静默失败。需确认计划任务中的 Python 解释器路径是否指向当前有效的面板环境。

参考来源