概述
每次打开浏览器看到地址栏里那把小绿锁,心里就踏实了不少。但你知道吗?很多 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
执行后会进入交互流程:
输入邮箱地址 — 用于证书到期通知和安全提醒,别填错
同意服务条款 — 输入
A同意选择是否共享邮箱 — 输入
Y或N都可以选择 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
看到 notBefore 和 notAfter 两个日期,说明证书正在生效。
设置自动续期
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 吧。