Ubuntu / Debian 系统下安装 Certbot 及手动申请证书教程
本教程适用于国内网络环境(在不翻墙的情况下),指导如何使用系统自带的包管理器安装官方 Certbot,并通过手动 DNS 挑战的方式申请 Let's Encrypt 证书。
1. 安装 Certbot 客户端
在国内服务器上,通过标准的 APT 包管理器可以直接从镜像站下载安装 Certbot,无需依赖海外特有渠道。
在终端中依次运行以下命令:
Bash
# 更新本地软件包索引
sudo apt update
# 安装 certbot 核心程序
sudo apt install -y certbot
2. 执行手动申请命令
安装完成后,直接在终端运行带手动交互参数的申请命令。使用 --preferred-challenges dns 指定通过配置 DNS TXT 记录来验证域名所有权(此操作不需要服务器对外开放 80 端口,且 Let's Encrypt 的验证接口在国内网络直接畅通,无需翻墙)。
以申请 yourdomain.com 及其泛域名 *.yourdomain.com 为例:
Bash
sudo certbot certonly \
--manual \
--preferred-challenges dns \
-d yourdomain.com \
-d "*.yourdomain.com"
注意:如果是初次执行certbot命令,系统可能会提示填写邮箱以及同意条款。
3. 配合交互完成身份验证(核心步骤)
执行命令后,终端会进入交互状态并暂停,屏幕上会输出类似以下的内容:
Plaintext
Please deploy a DNS TXT record under the name:
_acme-challenge.yourdomain.com
with the value:
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Before continuing, verify the record is deployed.
Press Enter to Continue
此时千万不要按回车,按照以下步骤去添加记录:
- 登录你的域名服务商控制台(如腾讯云、阿里云等)。
- 进入该域名的 DNS 解析设置,添加一条新的解析记录。
- 记录类型 选择:
TXT。 - 主机记录(Host)填写:
_acme-challenge。 - 记录值(Value)填写:终端屏幕上显示的那一长串随机 Hash 值。
- 如果同时申请了根域名和泛域名,终端可能会先后提示你添加两条不同的 TXT 记录,直接在控制台添加两条同名的 TXT 记录即可。
4. 触发验证与下载证书
在控制台添加完 TXT 记录后,建议先在本地终端验证解析是否在国内生效(无需回车,直接新开一个终端窗口运行):
Bash
nslookup -q=txt _acme-challenge.yourdomain.com
如果输出的文本内容与终端提示的 Hash 值一致,说明国内 DNS 已经同步成功。
此时回到原先暂停的 Certbot 终端窗口,按下回车。Certbot 的验证服务器会自动检索该 TXT 记录,验证通过后,终端会打印出成功提示,并将证书安全地存放在以下默认路径:
- 证书链文件(配置 Nginx 等 Web 服务器时使用):
/etc/letsencrypt/live/[yourdomain.com/fullchain.pem](https://yourdomain.com/fullchain.pem) - 私钥文件:
/etc/letsencrypt/live/[yourdomain.com/privkey.pem](https://yourdomain.com/privkey.pem)
📌 国内不翻墙环境下的避坑要点
- Let's Encrypt 接口国内完全可用: Let's Encrypt 的 ACME API 接口和 OCSP 验证节点在国内网络没有受到限制,无论是使用 Certbot 还是 acme.sh,在不翻墙的国内服务器上都可以直接连接并完成证书的申领和续期。
- 切勿直接用于自动化续期: 通过
--manual(手动模式)申请的证书,在 90 天到期时无法通过certbot renew自动续期。因为每次续期,Let's Encrypt 都会要求生成全新的随机 TXT 验证码,人工必须重新手动去改一次 DNS 解析。如果后续需要完全无人值守的自动化,需要转为使用带有云厂商 API 凭证的插件或工具。