← 中文资源

简体中文版本

用部署钩子自动化证书续期与重载

配置 certbot 续期与 dry-run 演练、让部署钩子重载正确的服务,并监控续期停滞并告警。

阅读英文原文

目标

续期成功只是写入了新文件:它不会重载 nginx、不会在定时器被禁用时自救、也不会主动宣布失败。完整的自动化有三段:经过验证的定时续期、重载所有证书消费者的部署钩子、以及独立监控剩余寿命并在链条任一环静默断裂时尖叫的看门狗。

步骤要点

  1. 先跑 certbot renew –dry-run 端到端验证 ACME 账户、挑战类型与授权,不碰线上证书。
  2. 在 renewal-hooks/deploy/ 写重载脚本:nginx -t 校验通过才 -s reload。
  3. systemctl list-timers 确认 certbot.timer 已启用且有下次运行时间。
  4. 再用 dry-run + 检查钩子文件权限,验证真实续期时整条链会正确执行。
  5. 部署独立看门狗:每天解析证书 enddate,剩余不足 14 天即告警,覆盖定时器被禁、钩子失效、挑战失败等一切静默模式。

排错提示

续期成功但站点仍供旧证书是服务没重载,把确切消费者写进 deploy hook;防火墙变更后挑战失败是 80/443 被封,放行或改用无需入站的 DNS-01;一张证书多服务共用时钩子必须逐一重载,只 reload nginx 会让 haproxy 继续供过期文件。

适用边界

dry-run 验证的是链路而非真实流量下的重载行为,应安排一次真实续期观察;ACME 有速率限制,别用 force-renewal 做演习,靠 dry-run 加监控兜底。

代码示例

# The deploy hook
#!/bin/sh
nginx -t && nginx -s reload

# The independent watchdog
openssl x509 -enddate -noout -in /etc/letsencrypt/live/example.com/fullchain.pem
# alert when fewer than 14 days remain