Certbot SSL 证书全自动续期:VPS HTTPS 一键配置指南

概述

每次打开浏览器看到地址栏里那把小绿锁,心里就踏实了不少。但你知道吗?很多 VPS 上的 HTTPS 网站突然打不开,原因往往就是 SSL 证书过期了。手动续期容易忘,尤其当你同时管着好几台服务器的时候。

Certbot 是 EFF(电子前哨基金会)推出的免费 SSL 证书工具,背后由 Let’s Encrypt 提供证书签发。它不仅能一次性帮你配置好 HTTPS,还能设置定时任务自动续期,一劳永逸。

这篇教程会带你从零开始,在 VPS 上完成 Certbot 的安装、证书申请、Nginx 配置以及自动续期的全套流程。

准备工作

你需要以下条件:

  • 一台 Linux VPS(推荐 Ubuntu 22.04 或 Debian 12)
  • 一个已解析到 VPS IP 的域名(比如 yourdomain.com
  • Nginx 已经安装并运行(如果没有,见下方快速安装命令)
  • 服务器防火墙已开放 80 和 443 端口

如果你还没有装 Nginx,跑这两行就行:

sudo apt update
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx

安装 Certbot

Ubuntu 和 Debian 系统自带 certbot 包,安装非常简单:

sudo apt update
sudo apt install -y certbot python3-certbot-nginx

安装完成后验证一下:

certbot --version

看到类似 certbot 2.x.x 的输出就说明安装成功了。

申请并配置 SSL 证书

这是最关键的一步。Certbot 会自动检测你的 Nginx 配置,修改站点设置,申请证书并完成 HTTPS 跳转。

运行以下命令(把 yourdomain.com 换成你的实际域名):

sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

执行后会进入交互流程:

  1. 输入邮箱地址 — 用于证书到期通知和安全提醒,别填错

  2. 同意服务条款 — 输入 A 同意

  3. 选择是否共享邮箱 — 输入 YN 都可以

  4. 选择 HTTPS 处理方式 — 选项有:

    • 1:重定向所有流量到 HTTPS(推荐)
    • 2:不修改请求(保持 HTTP)

    1 回车即可

Certbot 会自动完成以下操作:

  • 向 Let’s Encrypt 发起证书申请
  • 验证你对域名的控制权(通过 Nginx 的 HTTP 挑战)
  • 下载证书文件到 /etc/letsencrypt/live/yourdomain.com/
  • 修改 Nginx 配置文件,添加 HTTPS 监听和证书路径
  • 设置 HTTP 自动跳转到 HTTPS

配置完成后,打开浏览器访问 https://yourdomain.com,看看地址栏有没有出现绿色锁标志。

验证证书状态

申请成功后,检查一下证书详情:

sudo certbot certificates

输出会显示所有已申请的证书,包括有效期、自动续期状态等信息。你应该能看到类似这样的内容:

Certificate Name: yourdomain.com
  Domains: yourdomain.com www.yourdomain.com
  Expiry Date: 2026-10-28 00:00:00+00:00 (valid: 89 days)
  Certificate Path: /etc/letsencrypt/live/yourdomain.com/fullchain.pem
  Private Key Path: /etc/letsencrypt/live/yourdomain.com/privkey.pem

也可以用命令行直接测试证书有效性:

echo | openssl s_client -servername yourdomain.com -connect yourdomain.com:443 2>/dev/null | openssl x509 -noout -dates

看到 notBeforenotAfter 两个日期,说明证书正在生效。

设置自动续期

Let’s Encrypt 的证书有效期只有 90 天。好消息是,python3-certbot-nginx 安装包时会自动创建一个 systemd timer(定时任务),每 12 小时检查一次证书是否需要续期。

你可以手动触发续期测试,确认自动续期正常工作:

sudo certbot renew --dry-run

--dry-run 参数会模拟续期过程,不会真的更新证书。看到 Congratulations, all simulated renewals succeeded 就说明一切正常。

如果你想手动查看定时任务的状态:

systemctl list-timers | grep certbot

应该能看到 certbot.timer 在列表中,显示下次检查时间。

常见问题

Q: 域名还没解析到服务器就申请证书会失败吗?

会。Certbot 需要验证你对域名的控制权。如果 DNS 还没生效,申请会报 Failed authorization procedure 错误。先确认域名 A 记录已经指向你的 VPS IP,再重新申请。

Q: 一台服务器上有多个网站怎么办?

每个域名单独跑一次 certbot --nginx -d 域名 就行。Certbot 会为每个域名独立管理证书,互不影响。

Q: 自动续期失败了怎么排查?

先看日志:

sudo cat /var/log/letsencrypt/letsencrypt.log | tail -50

常见原因包括:Nginx 没在运行、80 端口被占用、DNS 解析异常。手动执行 sudo certbot renew 可以看到具体报错信息。

Q: 我用的是 Apache 而不是 Nginx 呢?

把命令里的 --nginx 改成 --apache 即可:

sudo certbot --apache -d yourdomain.com

Q: 证书文件存在哪?

证书文件统一放在 /etc/letsencrypt/live/你的域名/ 目录下,包含四个文件:

  • cert.pem — 你的域名证书
  • chain.pem — 中间 CA 证书链
  • fullchain.pem — 上面两者的合并(Nginx/Apache 推荐用这个)
  • privkey.pem — 私钥文件(务必保密)

总结

配置完自动续期之后,你基本可以完全忘记 SSL 证书这回事了。Certbot 的定时任务会在证书到期前 30 天自动续签,整个过程不需要你干预。

记住一个关键命令:sudo certbot renew --dry-run。定期跑一下,确保自动续期始终在正常工作。毕竟,网站因为证书过期打不开,损失的可不止是访客的信任。

现在就去给你的 VPS 加上 HTTPS 吧。

这篇文章对你有帮助吗?