环境:Ubuntu + Nginx + Certbot,域名:
www.zheng‑chang‑ren.xyz,原证书已过期
访问网站浏览器提示连接不是私密连接,证书过期。 查看旧证书信息:
www.zheng‑chang‑ren.xyz2026‑09‑13,已经过期。
尝试执行模拟续期命令,一开始报连接超时错误:
bash展开代码sudo certbot renew --dry-run
报错关键信息:
展开代码Timeout during connect (likely firewall problem)

原因:Let’s Encrypt 的 HTTP‑01 域名验证方式,需要公网可以访问服务器80端口,安全组/防火墙拦截80端口会直接验证失败。
入方向放行 TCP 80,来源 0.0.0.0/0。
注意:很多人只开放443(HTTPS),关闭80会导致certbot续期失败。
bash展开代码sudo ufw status
# 如果开启防火墙,放行80端口
sudo ufw allow 80/tcp
sudo ufw reload
bash展开代码sudo nginx -t sudo systemctl status nginx
确保 Nginx 配置无错误、服务正常运行。
--dry-run 只是模拟流程,不会真正签发证书,用来提前排查问题。
bash展开代码sudo certbot renew --dry-run
出现下面代表模拟全部成功:
展开代码Congratulations, all simulated renewals succeeded
模拟测试通过后,执行真实续期,生成新证书:
bash展开代码sudo certbot renew
证书文件存放路径:
展开代码/etc/letsencrypt/live/www.zheng‑chang‑ren.xyz/ ├─ fullchain.pem # 完整证书链 └─ privkey.pem # 私钥
⚠️必须重载Nginx,新证书才会生效,只续期不重载服务,网站依旧使用旧的过期证书。
bash展开代码sudo systemctl reload nginx
使用
reload平滑重载,不会中断网站访问;不要用restart。
bash展开代码sudo openssl x509 -in /etc/letsencrypt/live/www.zheng-chang-ren.xyz/fullchain.pem -noout -dates
输出会显示新的生效时间与到期时间,不再是旧的9月13日。

浏览器访问网站,Ctrl+Shift+R 强制刷新,点击地址栏小锁查看证书信息确认更新完成。
Certbot安装完成默认自带 certbot‑renew.timer systemd定时器,证书到期前30天自动尝试续期。
查看定时器状态:
bash展开代码sudo systemctl list-timers certbot-renew.timer
编辑root的定时任务:
bash展开代码sudo crontab -e
添加一行,每周凌晨2点执行续期,成功则重载Nginx:
cron展开代码0 2 * * 1 /usr/bin/certbot renew --quiet && systemctl reload nginx
dry‑run 一定要先跑一遍,避免正式续期踩坑。本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!