<p>Let’s Encrypt免费SSL证书需配置自动续期以防HTTPS失效,推荐用Certbot配合systemd timer(每天0点、12点检查,剩余≤30天时续期并自动重载Nginx);备选crontab(如0 3 *执行renew并--post-hook reload);CDN/泛域名场景则用acme.sh+DNS-01验证。</p>

免费 SSL 证书(如 Let’s Encrypt)默认只有 90 天有效期,必须配置自动续期,否则网站会突然 HTTPS 失效。核心不是“写脚本”,而是用成熟工具+定时任务组合实现稳定续期。下面分三类常见场景说明关键操作和配置要点。
用 Certbot 配置 systemd 自动续期(推荐 Ubuntu/Debian)
Certbot 安装后通常自带 systemd timer,无需手写脚本:
- 检查是否已启用:
systemctl list-timers | grep certbot,看到certbot.timer表示已就绪 - 它默认每天检查两次(00:00 和 12:00),只对剩余 ≤30 天的证书执行续期
- 续期成功后自动重载 Nginx/Apache,无需额外命令
- 如需手动触发测试:
sudo certbot renew --dry-run,输出The dry run was successful.即通过
用 crontab 补充或替代(适合 CentOS/RHEL 或定制需求)
如果系统没启用 timer,或你想控制具体时间点,可加 crontab:
- 运行
sudo crontab -e,添加一行: 0 3 * * * /usr/bin/certbot renew --quiet --post-hook "systemctl reload nginx"- 这表示每天凌晨 3 点检查并续期;
--post-hook确保证书更新后立即生效 - 注意路径:确认
certbot实际位置,可用which certbot查看
泛域名或 CDN 后端场景:用 DNS-01 验证 + acme.sh
当 80/443 端口不开放(比如用了 Cloudflare、阿里云 CDN),必须走 DNS 验证:
- 安装 acme.sh:
curl https://get.acme.sh | sh -s email=you@example.com - 配置 DNS API(如阿里云):
export Ali_Key="xxx"; export Ali_Secret="yyy" - 申请泛域名:
acme.sh --issue --dns dns_ali -d example.com -d *.example.com - 部署时指定证书路径,并设置定时任务:
0 4 * * * "/root/.acme.sh/acme.sh" --renew -d example.com --force
无论哪种方式,关键是验证续期流程真正跑通——上线前务必执行一次 --dry-run,并确认日志无报错、Nginx 能加载新证书。续期不是“设完就忘”,而是要定期检查 /var/log/letsencrypt/ 或 cron 日志,确保没有静默失败。


















