Let’s Encrypt 免费 SSL 证书自动续期:certbot 与宝塔实战

最尴尬的线上事故:证书过期

某天早上用户打开网站,浏览器红字警告「连接不安全」。查了一圈,不是被黑,是 SSL 证书悄悄过期了。尤其免费证书只有 90 天有效期,靠人工记日子迟早翻车。正确解法是:用 Let’s Encrypt 免费证书 + 自动化续期,从此忘掉它。

一、Let’s Encrypt 与 certbot 是什么

  • Let’s Encrypt:免费、自动、开放的 CA,证书有效期 90 天。
  • certbot:官方客户端,申请、部署、续期一条龙。

部署验证有两种方式:webroot(往网站目录放验证文件)和 standalone(临时起 80 端口)。生产推荐 webroot,不中断服务。

二、certbot 手动申请(通用方式)

# 安装(以 Ubuntu 为例)
sudo apt update && sudo apt install certbot

# 用 webroot 方式申请(需站点已能访问 80 端口)
sudo certbot certonly --webroot \
  -w /www/wwwroot/fsdata.site \
  -d fsdata.site -d www.fsdata.site

# 证书产出位置
# /etc/letsencrypt/live/fsdata.site/fullchain.pem
# /etc/letsencrypt/live/fsdata.site/privkey.pem

然后在 Nginx 里指向这两个文件即可启用 HTTPS。

三、宝塔面板用户:更省事

宝塔已内置 Let’s Encrypt 对接:

  1. 宝塔 → 网站 → 你的站点 → SSL
  2. 选 Let’s Encrypt → 勾选域名 → 点「申请」
  3. 勾选「强制 HTTPS」和「自动续期」

宝塔会自动用定时任务续期,基本不用管。但建议仍确认续期任务在跑(见下)。

四、自动化续期:核心一步

certbot 安装时会注册一个 systemd timer 或 cron,每天检查、到期前 30 天自动续。手动验证:

# 模拟续期(不真改证书,只测试流程)
sudo certbot renew --dry-run

# 看续期定时任务
systemctl list-timers | grep certbot
# 或
cat /etc/cron.d/certbot

只要 --dry-run 通过,真实续期就没问题。Nginx 需在续期后重载:certbot 的 deploy hook 或宝塔的 post-renewal 脚本里加 nginx -s reload。

五、常见坑

  • 80 端口被占导致验证失败:webroot 方式要求 80 端口能访问验证路径,确认防火墙/其他服务没拦。
  • 续期后 Nginx 没重载:证书更新了但站点还在用旧证书,需配置 reload hook。
  • 泛域名证书:*.example.com 必须用 DNS 验证(--manual --preferred-challenges dns 或对应插件),较复杂。
  • 频率限制:同一域名证书申请有周限额,测试多用 --staging 预发环境。

六、检查清单

  1. 证书已申请且在 /etc/letsencrypt/live/ 下
  2. Nginx 已配置 fullchain + privkey 并 reload
  3. certbot renew 定时任务存在(systemd timer / cron)
  4. certbot renew --dry-run 通过
  5. 续期后自动 reload Nginx 已配置

小结

HTTPS 不是「配一次就完事」,而是「配一次、自动续、常检查」。Let’s Encrypt 把成本降到零,certbot/宝塔把续期自动化,你只需要在部署时顺手确认续期任务和 reload hook 到位。做到这几步,证书过期导致的红屏噩梦就和你无关了。

上一篇 Docker Compose 一键编排:MySQL + Redis + 后端服务
下一篇 2026 年搭建私有 AI 知识库:Dify + Ollama 本地部署完整教程
最新评论
Docker 网络模式详解:bridge/host 生产选型 - FSData
Docker 网络模式详解:bridge/host 生产选型 - FSData
8月20日
[…] 注意最后那条:把端口绑定到 127.0.0.1,再由宿主机上的 Nginx 反代进来,比直接 -p 80:80 暴露安全得多,也方便统一做
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
Vue3 + TypeScript 工程化:类型安全的前端架构 - FSData
8月20日
[…] Pinia 的工程化用法,可以参考我们之前的实战文章 《Vue3 组合式 API + Pinia:状态管理从入门到实战》,那里覆盖了 Sto
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
2026 年最值得装的 10 个 VS Code 插件(AI/前端/后端/效率全覆盖) - FSData
8月19日
[…] 状态,点一下就能起停容器,配合我们讲过的 Docker Compose 编排 […]
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
Redis 缓存设计:穿透、击穿、雪崩与最佳实践 - FSData
8月19日
[…] 缓存三大坑的本质都是”缓存失效导致请求穿透到数据库”。记住口诀:穿透用布隆、击穿用锁、雪崩用错峰。配合合理的过期策略
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
GitHub Actions 实战:从零搭建 CI/CD 流水线 - FSData
8月19日
[…] Docker 镜像部署。结合我们之前写的 Docker Compose 一键编排实战,可以在 CI […]