【运维实战】手动申请 Let’s Encrypt SSL 泛域名证书

【运维实战】手动申请 Let’s Encrypt SSL 泛域名证书

一、 介绍

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"

 

关键步骤解析:

  1. 触发验证:执行命令后,Certbot 会停止并提示你添加 DNS 记录。

  2. 第一个记录:它会要求你在 _acme-challenge.example.com 下添加一个随机字符串(TXT 记录)。

  3. 第二个记录(重要!):当你按下回车后,它通常会再次给出一个不同的随机字符串,要求你添加在同一个主机名 _acme-challenge 下。

    • 切记:不要覆盖掉第一个记录!在 DNS 后台,你需要添加两条同名的 TXT 记录,但记录值不同。

  4. 验证生效:在按下回车继续之前,务必在本地终端确认解析已同步。

验证命令:

# 使用 dig 工具查看,确保能输出两条不同的随机值
dig TXT _acme-challenge.example.com +short

警告: 如果你在 DNS 记录还没生效(或者只加了一条记录)的情况下就按下了回车,Certbot 会校验失败。一旦失败,你必须从头开始,且验证值会发生变化。

图片[1]-【运维实战】手动申请 Let’s Encrypt SSL 泛域名证书-Reverse


四、 成功输出示例

如果两条记录都校验通过,你会看到如下信息:

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-cloudflarepython3-certbot-aliyun),它们可以通过 API 自动修改 DNS 完成续期。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容