HTTPS 已成为现代网站的标配,浏览器会对无 SSL 的 HTTP 网站显示「不安全」警告,影响访客信任感。Let's Encrypt 提供完全免费的 DV 证书,配合 Certbot 工具可以在几分钟内完成安装与自动续期。本文以搬瓦工 VPS + Nginx 为例,完整演示整个流程。
本文要点
- Certbot 的安装方式(Snap 与 apt 两种)
- 为已有 Nginx 站点一键签发 SSL 证书
- 自动续期机制与手动触发测试
- 证书相关文件的位置与含义
- 签发失败的常见原因与排查
签发证书的前提条件
Let's Encrypt 通过 HTTP-01 挑战验证你对域名的控制权,需要满足以下条件:
- 域名已通过 A 记录解析到 VPS 公网 IP
- VPS 上 Nginx 已正常运行,80 端口对外可访问
- 防火墙已放行 80 和 443 端口
先确认 80 端口可访问
http://你的域名 确认返回页面(哪怕是默认 Nginx 页也行),否则 Let's Encrypt 服务器无法完成验证,签发会失败。安装 Certbot
方法一:通过 Snap 安装(推荐,保持最新版)
# Debian/Ubuntu
apt update && apt install -y snapd
snap install core && snap refresh core
snap install --classic certbot
ln -sf /snap/bin/certbot /usr/bin/certbot方法二:通过 apt 直接安装
# Debian/Ubuntu
apt update && apt install -y certbot python3-certbot-nginx
# CentOS/AlmaLinux/Rocky(EPEL 源)
dnf install -y epel-release
dnf install -y certbot python3-certbot-nginx签发证书
使用 --nginx 插件,Certbot 会自动读取 Nginx 配置、完成验证并修改配置加入 SSL:
certbot --nginx -d example.com -d www.example.com
# 按提示输入邮箱(用于到期提醒),同意协议
# 完成后 Certbot 会自动修改 Nginx 配置并 reload签发成功标志
证书文件在哪里
| 文件 | 路径 | 用途 |
|---|---|---|
| 证书链 | /etc/letsencrypt/live/域名/fullchain.pem | Nginx ssl_certificate |
| 私钥 | /etc/letsencrypt/live/域名/privkey.pem | Nginx ssl_certificate_key |
| 证书本身 | /etc/letsencrypt/live/域名/cert.pem | 单独证书(一般不单独用) |
自动续期
Let's Encrypt 证书有效期 90 天,Certbot 安装时会自动创建 systemd timer 或 cron 定时任务,每天检查并在到期前 30 天自动续期。验证自动续期是否正常:
# 查看 systemd timer 状态(Debian/Ubuntu)
systemctl status snap.certbot.renew.timer
# 模拟续期(不会真实修改证书)
certbot renew --dry-run
# 查看当前证书到期时间
certbot certificates续期后需 reload Nginx
/etc/letsencrypt/renewal/域名.conf 里的 deploy hook 配置。签发失败的常见原因
| 错误提示关键词 | 可能原因 | 解决方法 |
|---|---|---|
| Connection refused / Timeout | 80 端口未开放或防火墙拦截 | 检查防火墙规则,确认 80 可访问 |
| DNS problem | 域名 A 记录未指向本机 IP | 确认解析已生效(dig @8.8.8.8 域名 A) |
| Too many certificates | 同一域名签发过多 | 等待 7 天重置,或用 --force-renewal |
| Nginx config error | Nginx 配置有误导致验证路由失败 | nginx -t 检查配置 |
小结
- Certbot + Nginx 插件,一条命令完成签发与配置
- 签发前确认 80 端口可访问、域名已正确解析
- 自动续期已内置,用 --dry-run 测试是否正常
- 证书 fullchain.pem + privkey.pem 是 Nginx 需要的两个文件
常见问题
证书 90 天到期后会自动续吗?
会。Certbot 安装时会创建定时任务,每天检查到期时间,到期前 30 天自动续期。用 certbot renew --dry-run 可测试自动续期流程是否正常。
一张证书能覆盖多个域名吗?
可以,用多个 -d 参数指定即可,如 certbot --nginx -d a.com -d b.com。Let's Encrypt 单次最多支持 100 个域名。
签发失败提示 too many certificates?
同一个注册域名每周最多签发 5 张证书,超出后需等待 7 天重置窗口,或添加新的子域名到已有证书。
Certbot 会修改我的 Nginx 配置吗?
使用 --nginx 插件时 Certbot 会自动在配置文件里添加 ssl_certificate 等指令并 reload。若不想自动修改,可用 --certonly 只获取证书,再手动写配置。