Let's Encrypt 对每个注册域名每周限制签发 50 张证书,但符合定义的正常续签不占用这个配额。
先说结论:正常续签不会消耗每周 50 张的签发配额,但必须满足域名集合完全一致且在前一张证书颁发后 30 天内操作。
- 先确认:检查当前证书域名列表是否与计划续签的完全一致。
- 先处理:尽量使用自动化客户端(如 Certbot)管理续签,避免手动重复提交。
- 再验证:遇到速率限制报错时,查看错误信息区分是“每周限额”还是“重复证书限额”。
命令速用版
虽然没有直接查询剩余配额的命令,但可以通过检查现有证书状态来规划续签时机,避免误触限制。
# 查看 Certbot 管理的证书列表及过期时间
sudo certbot certificates
# 模拟续签(不会真正签发,用于检查配置是否正确)
sudo certbot renew `--dry-run`
# 查看特定域名的证书有效期( OpenSSL 方式)
echo | openssl s_client -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates
为什么会这样
Let's Encrypt 设置速率限制是为了防止滥用和误操作导致的服务中断。核心限制主要有两条:
第一是“每个注册域名每周证书数量限制”,通常为每周 50 张。这里的注册域名指的是主域名(例如 example.com),其所有子域名(如 www.example.com, blog.example.com)都共享这 50 张的配额。但是,官方文档明确说明,符合定义的“续签”不计入这 50 张的限制。
第二是“重复证书限制”,每周每个精确的域名集合只能签发 2 张。如果你频繁请求完全相同的域名组合,即使没有超过 50 张的总额,也会触发这个更严格的限制。这也是为什么不建议手动反复测试签发命令的原因。
分步处理
- 检查当前证书状态
使用 certbot certificates 确认当前证书何时过期。通常建议在过期前 30 天内进行续签,这样会被系统识别为续签而非新发。
- 配置自动续签
在生产环境中,不要手动运行签发命令。配置系统定时任务(如 systemd timer 或 cron)自动运行 certbot renew。自动化客户端会处理大部分逻辑,减少人为误触限制的风险。
- 遇到限制时的处理
如果收到 rate limit 错误,先停止所有签发尝试。如果是“每周限额”超限,必须等待下周重置;如果是“重复证书”超限,检查是否短时间内请求了多次相同域名。不要试图通过增加子域名来绕过限制,因为这会消耗主域名的总配额。
怎么验证是否生效
续签操作完成后,可以通过以下方式确认新证书已生效且未触发限制:
- 查看日志:Certbot 成功续签后会在终端输出 Congratulations 字样,日志通常位于 /var/log/letsencrypt/letsencrypt.log。
- 检查有效期:使用 OpenSSL 命令查看服务器当前提供的证书 Not After 日期是否已更新。
- 浏览器验证:在浏览器地址栏点击锁图标,查看证书有效期是否延长。
常见坑
- 子域名共享配额:很多站长误以为每个子域名都有独立的 50 张配额。实际上 test1.example.com 和 test2.example.com 都消耗 example.com 的每周 50 张总额。
- 测试环境误操作:在 staging 环境频繁测试签发命令容易触发“重复证书限制”。测试时请使用 Let's Encrypt 的 Staging 服务器,它有更宽松的限制。
- 域名集合变动:如果在续签时增加或减少了一个子域名,系统将不再视其为“续签”,而是视为新证书签发,这会占用每周 50 张的配额。
参考来源
- Let's Encrypt 官方文档 - Rate Limits,页面标题:Rate Limits,URL:https://letsencrypt.org/docs/rate-limits/