【摘要】
Let's Encrypt提供免费SSL证书但有效期仅90天,自动化续期是保障HTTPS服务不中断的关键。本文基于Nginx + Ubuntu环境,详细介绍Certbot申请证书、配置自动续期定时任务、模拟测试续期、外部监控兜底及Nginx安全参数优化的完整流程。
关键词:Let's Encrypt, Certbot, SSL证书, HTTPS, 自动续期, Nginx
一、 问题背景
Let's Encrypt免费证书有效期90天,需定期续期。手动续期存在遗忘风险(如cron任务因服务器迁移丢失),导致证书过期、网站HTTPS不可用,影响用户信任与SEO。
本文提供一套经过验证的申请、续期、监控全自动化方案。
二、 申请SSL证书
环境:Ubuntu + Nginx
2.1 安装Certbot
bash
sudo apt update sudo apt install certbot python3-certbot-nginx2.2 申请证书
bash
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com执行后Certbot将自动:
验证域名所有权(通过HTTP-01方式)
签发证书
修改Nginx配置文件,添加SSL相关配置
重载Nginx
2.3 其他验证方式
若服务器Nginx端口不对外开放,可使用DNS验证:
bash
sudo certbot --manual --preferred-challenges dns -d yourdomain.com此方式需在DNS控制台添加TXT记录,适合CDN/负载均衡后端场景。
三、 配置自动续期
3.1 确认systemd timer
Certbot安装时通常自动创建systemd timer:
bash
systemctl list-timers | grep certbot存在certbot.timer即表示自动续期已启用,每天执行两次检查。
3.2 手动添加cron定时任务(备选方案)
若无systemd timer,手动添加cron:
bash
sudo crontab -e添加以下内容:
text
0 0,12 * * * /usr/bin/certbot renew --quiet
参数说明:
0,12:每天0时与12时执行renew:检查所有已签发证书,到期前30天内执行续期--quiet:成功时无输出,失败时输出错误信息
四、 测试续期是否正常
在上线前执行模拟续期,验证配置是否正确:
bash
sudo certbot renew --dry-run期望输出:
text
The dry run was successful.
常见报错与排查:
| 报错现象 | 原因 | 解决方案 |
|---|---|---|
| 端口占用错误 | 80/443端口被其他服务占用 | 临时停用占用服务或使用DNS验证 |
| DNS解析失败 | 域名未正确解析至服务器IP | 检查DNS A记录,多域名证书需逐一确认 |
| 连接超时 | 防火墙未开放80/443端口 | 检查安全组/iptables规则 |
五、 外部监控兜底方案
自动续期依赖系统cron、服务器时间等本地环境,存在小概率失效可能。建议增加一层外部监控。
方案:
使用SSL证书监控服务(UptimeRobot等),设置证书有效期 < 30天时发送邮件/钉钉通知。
部分云厂商也提供类似功能:
阿里云:SSL证书服务 → 证书监控
腾讯云:SSL证书管理 → 到期提醒
六、 Nginx SSL安全配置优化
6.1 基础配置
Certbot生成的Nginx配置片段:
nginx
server { listen 443 ssl http2; server_name yourdomain.com; ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; }6.2 安全增强配置
nginx
# 仅启用安全协议版本 ssl_protocols TLSv1.2 TLSv1.3; # 禁用弱加密套件 ssl_ciphers HIGH:!aNULL:!MD5; # 启用HSTS,强制HTTPS访问(有效期180天) add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always; # SSL会话缓存优化 ssl_session_cache shared:SSL:10m; ssl_session_timeout 1d;
HSTS说明:启用后浏览器首次访问HTTPS后将记录该策略,后续同域名请求自动升级为HTTPS,避免302跳转开销与中间人攻击风险。
七、 Let's Encrypt与云厂商免费证书对比
| 维度 | Let's Encrypt | 云厂商免费证书(阿里/腾讯) |
|---|---|---|
| 有效期 | 90天 | 1年 |
| 续期方式 | 全自动(Certbot) | 手动申请-下载-上传-部署 |
| 数量限制 | 无 | 约20个/账号 |
| 集成便利性 | 需服务器配置Nginx | CDN/负载均衡可一键关联 |
| 适用场景 | 自建服务器 | 使用云厂商全托管服务的场景 |
推荐策略:自建服务器使用Let's Encrypt + Certbot全自动方案;业务已深度集成云厂商CDN/CLB时,可选用云厂商证书简化运维。
八、 服务器环境建议
SSL证书申请与自动续期需在自有服务器上运行Certbot。若尚未购买服务器或面临实名认证、国际信用卡等注册障碍,可考虑代理渠道。Ztopcloud支持邮箱注册与微信支付宝充值,开通后可直接登录阿里云/腾讯云官方控制台操作,与官网购买体验一致。
九、 总结
HTTPS是网站安全的基础设施。本文方案可实现:
三分钟申请证书(Certbot一键完成)
全自动续期(systemd timer或cron)
续期可靠性验证(dry-run模拟测试)
多重保障(外部监控兜底 + Nginx安全加固)
完成以上配置后,SSL证书管理即可实现“零运维”。