Skip to content

排错与最佳实践

目标:遇到报错能快速定位,掌握安全、限速、备份等生产要点。

1. 排错总原则

  1. 看日志:sudo tail -n 100 /var/log/letsencrypt/letsencrypt.log
  2. --dry-run 复现,避免反复失败触发限速。
  3. 复杂调试用 staging(--test-cert),成功后再上生产。

2. 常见错误与解决

现象 / 报错关键词常见原因解决办法
Connection refused / timeout(HTTP-01)80 端口不通、防火墙、域名未解析开放 80;dig +short 域名 核对解析;ss -tlnp 看端口
Invalid response from ... 404/403webroot 目录不对、Web 服务器拦截 /.well-known/核对 -w 目录与 server root;放行该路径
No valid IP addresses found域名没解析到本机公网 IP检查 DNS A/AAAA 记录并等 TTL 生效
too many failed authorizations验证失败次数达到每小时上限(5 次/账户/主机名)停止重试,等 1 小时;先 --dry-run 修好再跑
too many certificates already issued同一组域名重复签发达到周上限(5 次/周)--cert-name 复用续期而非反复重签;等待或减少重签
Error creating new order :: too many certificates注册域名周上限(约 50 张/周)规划域名、合并 SAN、等待下一周
No installers seem to be present没装 nginx/apache 插件,或服务未安装certbot plugins 查看;装 python3-certbot-nginx
Problem binding to port 80standalone 时 80 被占用先停服务或用 --pre-hook 停、--post-hook
DNS problem: NXDOMAIN(DNS-01)TXT 记录没生效/加错位置等 DNS 传播;核对 _acme-challenge 前缀
urn:ietf:params:acme:error:rateLimited触发 CA 限速看具体类型,等待或换 staging
私钥权限告警privkey.pem 权限过宽chmod 600 privkey.pem

ACME 错误码(urn:ietf:params:acme:error:*)可直接在 Let's Encrypt 文档里查含义。

3. Let's Encrypt 限速(重要,务必了解)

限制项大致额度说明
证书数 / 注册域名50 张 / 周所有证书(含续期)按"注册域名"统计
重复证书(完全相同的域名集合)5 张 / 周频繁重签同组域名会撞上
验证失败5 次 / 账户 / 主机名 / 小时反复调试最容易撞这个
待处理授权300 / 账户大量并发签发时注意

应对:测试用 staging(几乎不限速);正式签发前 --dry-run;失败后停手等冷却;续期不是"重新签发",正常不占重复证书额度(但计入 50/周 的注册域名额度)。

官方最新数值以 https://letsencrypt.org/docs/rate-limits/ 为准。

4. 安全最佳实践

  • 私钥最小权限privkey.pemchmod 600,属主 root。
  • 私钥泄露立即处理certbot revoke 撤销 + 重新签发 + 排查泄露点。
  • 账号密钥别乱删/etc/letsencrypt/accounts/ 删除会生成新账号,影响续期关联。
  • 启用 HSTS / OCSP(nginx/apache 插件):--hsts --staple-ocsp
  • 定期备份/etc/letsencrypt 整体加密备份(见 配置与文件布局)。
  • 限制 SSH/面板访问:能读 /etc/letsencrypt 的人等于能拿到私钥。

5. 运维检查清单

bash
# 1) 证书是否都在有效期内、还剩多久
sudo certbot certificates

# 2) 续期定时器是否在跑
systemctl list-timers --all | grep -i certbot

# 3) 续期演练是否通过(建议纳入日常监控/CI)
sudo certbot renew --dry-run

# 4) 线上 HTTPS 证书链是否完整、到期时间
echo | openssl s_client -servername example.com -connect example.com:443 2>/dev/null \
  | openssl x509 -noout -dates -subject -issuer

6. 一条命令排错定位

bash
# 完整流程演练 + 详细输出
sudo certbot renew --dry-run -v
# -v / -vv 提高日志详细度,定位失败的具体步骤

7. 参考链接