Certbot 配合 Nginx 申请证书,是目前最官方、最傻瓜化的方案
使用 Certbot 配合 Nginx 申请证书,是目前最官方、最傻瓜化的方案。
与 acme.sh 相比,Certbot 最大的特点是自动化程度极高。它不仅能申请证书,甚至能直接帮你修改 Nginx 的配置文件,自动配置好 HTTPS 和 301 跳转。
以下是基于 Ubuntu/Debian 系统的标准操作流程(CentOS 类似):
第一步:安装 Certbot
Certbot 是基于 Python 开发的,官方推荐使用 snap 安装以获取最新版,但使用系统自带的包管理器(apt/yum)通常更方便且够用。
# 更新软件源
sudo apt update
# 安装核心组件和 Nginx 插件
sudo apt install certbot python3-certbot-nginx
第二步:一键申请并配置 (--nginx)
确保你的 Nginx 已经在运行,且配置了 server_name 指向你的域名(例如 api.yuangs.cc)。
运行这条命令,它会自动读取你的 Nginx 配置:
sudo certbot --nginx
接下来会进入交互式界面,Certbot 会问你几个问题:
- 输入邮箱:用于接收证书过期提醒(必填)。
- 同意协议:输入
A(Agree)。 - 分享邮箱:输入
N(No,除非你想收广告)。 - 选择域名:它会列出从 Nginx 配置里读到的所有域名。
- 输入数字选择(例如输入
1或直接回车全选)。
- 输入数字选择(例如输入
- 是否开启强制 HTTPS 跳转? (Redirect)
1: No redirect- 不修改,只开启 HTTPS。2: Redirect- 推荐选这个。Certbot 会自动在 Nginx 里插入一段 301 跳转代码,让 HTTP 自动跳到 HTTPS。
第三步:发生了什么?(底层解析)
等你看到 "Congratulations!" 时,HTTPS 已经配置好了。Certbot 在后台默默做了两件大事:
1. 证书存放
证书被存放在了 /etc/letsencrypt/live/你的域名/ 目录下:
fullchain.pem: 完整证书链(对应 Nginx 的ssl_certificate)。privkey.pem: 私钥(对应 Nginx 的ssl_certificate_key)。
2. Nginx 配置被修改 (Magic)
打开你的 Nginx 配置文件,你会发现它被 Certbot **“魔改”**了。
- 原来的
server块:被插入了ssl_certificate等路径,以及listen 443 ssl。 - 新增的
server块(如果你选了 Redirect):Certbot 会自动增加一个监听 80 端口的块,专门负责把流量重定向到 HTTPS。
你会看到类似这样的注释,标志着这是 Certbot 自动管理的:
ssl_certificate /etc/letsencrypt/live/api.yuangs.cc/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/api.yuangs.cc/privkey.pem; # managed by Certbot
第四步:自动续期测试
Certbot 安装时会自动在系统里添加一个定时任务(systemd timer 或 cron)。你不需要手动写脚本。
你可以运行这个命令来测试自动续期机制是否正常:
sudo certbot renew --dry-run
如果输出 "Congratulations, all renewals succeeded",说明自动续期没问题。
💡 Certbot vs acme.sh:怎么选?
既然你两个都了解了,这里给一个最终选择建议:
| 特性 | Certbot (官方推荐) | acme.sh (极客首选) |
|---|---|---|
| 依赖 | 较重 (Python) | 极轻 (纯 Shell) |
| 配置 Nginx | 自动修改 (省事,但会改乱格式) | 不修改 (安全,需要手动配置) |
| 侵入性 | 强 (接管 Nginx 配置) | 弱 (只提供证书文件) |
| DNS API | 需要额外安装插件 | 内置 支持几百种 DNS 商 |
| 适用人群 | 新手、运维 (求快,不想写配置) | 开发者、极客 (求稳,想完全掌控) |
我的建议:
- 如果你不熟悉 Nginx 配置,怕写错,用 Certbot。
- 如果你有洁癖,不喜欢工具乱改你的 Nginx 配置文件,或者你的环境不能装 Python,用 acme.sh。