一、 介绍
Let’s Encrypt 提供免费、开放且自动化的证书颁发服务。对于泛域名证书(例如 *.example.com),ACME 协议强制要求使用 DNS-01 验证。这意味着你无需在服务器上运行 80 端口的服务,但必须拥有对域名 DNS 解析的控制权。
注意: 本文以 Ubuntu 环境为例,域名以
example.com为演示。
二、 安装工具
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
三、 申请证书(手动模式)
执行以下命令开始申请。我们通过 -d 参数同时指定主域名和泛域名,这样生成的证书可以同时保护 example.com 及其所有子域名。
certbot certonly \
--manual \
--preferred-challenges dns \
-d "example.com" \
-d "*.example.com"
关键步骤解析:
-
触发验证:执行命令后,Certbot 会停止并提示你添加 DNS 记录。
-
第一个记录:它会要求你在
_acme-challenge.example.com下添加一个随机字符串(TXT 记录)。 -
第二个记录(重要!):当你按下回车后,它通常会再次给出一个不同的随机字符串,要求你添加在同一个主机名
_acme-challenge下。-
切记:不要覆盖掉第一个记录!在 DNS 后台,你需要添加两条同名的 TXT 记录,但记录值不同。
-
-
验证生效:在按下回车继续之前,务必在本地终端确认解析已同步。
验证命令:
# 使用 dig 工具查看,确保能输出两条不同的随机值
dig TXT _acme-challenge.example.com +short
警告: 如果你在 DNS 记录还没生效(或者只加了一条记录)的情况下就按下了回车,Certbot 会校验失败。一旦失败,你必须从头开始,且验证值会发生变化。
![图片[1]-【运维实战】手动申请 Let’s Encrypt SSL 泛域名证书-Reverse](https://hyhacct.github.io/picx-images-hosting/hexo/001.4jomrftkjr.png)
四、 成功输出示例
如果两条记录都校验通过,你会看到如下信息:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 202x-xx-xx.
-
fullchain.pem:你的证书文件(含中间链)。
-
privkey.pem:你的私钥文件。
五、 关于续期(重要)
由于我们使用的是 --manual(手动模式),Let’s Encrypt 无法通过脚本自动为你更新 DNS 记录,因此:
-
手动证书不支持自动续期:
certbot renew对手动模式无效。 -
到期处理:你需要在 90 天有效期结束前(建议每 2 个月),重新执行上述命令并手动更新 DNS TXT 记录。
进阶建议:如果你追求全自动化,建议研究
DNS 插件(如python3-certbot-cloudflare或python3-certbot-aliyun),它们可以通过 API 自动修改 DNS 完成续期。











暂无评论内容