先把当时的情况摆出来。三台应用服务器各自跑 certbot,同一组域名一周内重复申请了 6 次,第 7 次返回 too many certificates already issued for exact set of domains。证书三天后到期,站点开始报过期。
原因不止一个,得分开看。同一组域名每周最多签发 5 张证书,重复申请直接触顶。少数情况下是每台机器独立跑 certbot,没有共享同一份证书。
还有一种情况,调试时用了 --force-renewal,把配额当成无限。另外,失败后用脚本自动重试,短时间放大了申请次数。
先确认是不是配额问题
grep -i 'too many certificates' /var/log/letsencrypt/letsencrypt.log | tail -3
随后用 staging 环境验证配置
certbot renew --dry-run --staging
只在一台机器签发并分发
certbot certonly --webroot -w /var/www/html -d www.example.com -d example.com
末了配额恢复后再正式续签
certbot renew --cert-name example.com
别只看报错消失,验证要多做一步。停止重复申请后等待配额窗口重置,证书续签成功,三台机器的证书指纹一致,过期告警解除。
容易忽略的是,配额按注册域名组计算,测试阶段一定要用 staging,正式环境只在唯一节点上签发再分发。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。
