几乎每个站长都经历过或听说过这样的场景:某个周末早上,用户反馈网站打不开,打开一看浏览器提示连接不是私密连接,再一查,SSL证书昨天夜里过期了。证书有效期越来越短(Let’s Encrypt只有90天),手动续期显然不现实,正确做法是配置自动续期。本文以Nginx为例说明完整流程。

先检查证书的到期时间
处理问题前先确认现状。用下面命令可以查看证书信息与剩余有效期:
openssl x509 -enddate -noout -in /etc/letsencrypt/live/你的域名/fullchain.pem
# 或直接检查网站当前证书
openssl s_client -connect 你的域名:443 -servername 你的域名 </dev/null 2>/dev/null | openssl x509 -noout -enddate
已过期证书如何快速恢复
证书过期后的恢复和首次申请一样,用certbot重新签发即可,前提是验证用的80端口或DNS解析正常可用。以webroot方式为例:
# 安装certbot(以CentOS为例)
yum install -y certbot python3-certbot-nginx
# 重新签发(会自动校验并替换证书)
certbot certonly --webroot -w /var/www/html -d 你的域名
# 或使用nginx插件一步到位
certbot --nginx -d 你的域名
签发完成后重新加载Nginx让新证书生效:nginx -s reload。这里提醒一句:证书恢复后,浏览器端可能仍有缓存,可以稍等或提示用户强制刷新。
配置自动续期(关键一步)
certbot自带续期命令,标准做法是把它加入系统的定时任务。先测试续期流程能否正常执行:
# 模拟续期,检查配置是否正确
certbot renew --dry-run
如果dry-run通过,把续期命令写入crontab,每天凌晨执行两次续期检查。certbot会在证书剩余不足30天时才真正续期,所以每天执行并不会产生多余请求:
crontab -e
# 每天 2:30 和 14:30 检查续期
30 2 * * * /usr/bin/certbot renew --quiet --deploy-hook "nginx -s reload"
30 14 * * * /usr/bin/certbot renew --quiet --deploy-hook "nginx -s reload"
–deploy-hook 的作用是仅在证书真正续期成功后重新加载Nginx,避免每次都reload。部分新版系统也支持 systemctl enable –now certbot-renew.timer 用系统定时器代替crontab,效果相同。
证书自动续期失败的常见原因
- 80端口被防火墙或安全组拦截,HTTP验证无法通过:续期前先确认防火墙放行;
- 域名解析变更或网站架构调整后验证路径失效:检查webroot参数是否仍指向正确目录;
- certbot版本过旧:先升级certbot再测试dry-run;
- 多域名证书中某个域名已不再解析:为不再使用的域名单独处理或删除对应配置。
相关问答FAQs
- 问:证书到期前会收到提醒吗?答:certbot本身不发邮件,但可以配置邮件提醒,或使用云厂商的证书管理服务与监控告警。
- 问:泛域名证书能用certbot自动续期吗?答:可以,但需要DNS验证(如certbot-dns-cloudflare等插件),HTTP验证无法签发泛域名证书。
- 问:续期失败网站会立刻打不开吗?答:不会,旧证书会一直生效到真正过期那一刻,过期后浏览器才会拦截,所以续期失败后还有时间修复。
HTTPS证书管理的核心就一句话:把续期自动化,把失败可视化。配置好crontab或systemd定时器后,别忘了把证书到期时间加入监控告警,并定期执行一次 certbot renew –dry-run 验证流程健康,这样证书过期导致的网站故障就能基本杜绝。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!