Let's Encrypt 自动续期踩过的坑
HTTP-01 还是 DNS-01
有公网 80 就用 HTTP-01,简单直接;80 被占用或需要签通配符证书时走 DNS-01。DNS 托管在 Cloudflare 的话,用 API Token 自动改写 TXT 记录很省事。
续期钩子要放在 deploy 目录
证书换新之后,服务并不会自己重载。把重载脚本放到 /etc/letsencrypt/renewal-hooks/deploy/,每次成功续期都会执行。
#!/bin/sh
systemctl reload nginx
记得 chmod +x,否则它只是个安静的摆设。
几个容易忽略的点
- 续期不是到期前一刻才发生,certbot 在剩余 30 天左右就开始尝试。
certbot renew --dry-run可以在不消耗配额的前提下验证整条链路。- 如果 80 端口后来被防火墙关掉,续期会开始失败,而失败通知默认只发邮件。
- 订阅到期前 89 天的证书是正常的,别被"有效期不足 90 天"吓到。
看一眼状态
certbot certificates
systemctl list-timers certbot.timer
这两条命令能回答"证书还有多久过期"和"定时任务还活着吗"。