使用 DNS-01 方式申请证书,有两种方法:

  • Certbot + DNS 插件:Certbot 提供了多种 DNS 插件(如 Cloudflare、Route53 等),可以自动完成 DNS 记录的添加和删除。
  • Certbot + 手动 DNS:你可以选择手动添加 DNS 记录,适合不支持自动化的 DNS 提供商。
DNS-01 验证方式的优势:
  • 适用于任何环境:不依赖于 HTTP 服务,适合内网服务器、CDN 后端等。
  • 支持通配符证书:可以申请 *.example.com 的通配符证书,适合多子域名场景。
  • 更安全:不需要暴露 HTTP 服务,减少攻击面。
DNS-01 验证方式的缺点:
  • 配置复杂:需要正确配置 DNS 记录,可能需要等待 DNS 生效。
  • 不适合频繁变更:DNS 记录的修改可能需要较长时间生效,不适合频繁申请和续期。

总的来说,DNS-01 验证方式适合需要通配符证书、没有公共 HTTP 服务或需要更高安全性的场景。选择适合的验证方式,可以让你的证书申请和管理更加顺利。

自动化 DNS-01 (推荐)

如果你用的是 CloudflareAWS Route53,Certbot 提供了官方插件,可以自动完成 DNS 记录的添加和删除,极大简化了流程。

以 Cloudflare 为例

Tip

在配置 Cloudflare API Tokens 之前,你需要了解,配置好 权限 和 资源 后, 请将Debian的公网的IP地址添加到 Cloudflare API页面中 客户端IP 地址白名单 中, 否则会在Certbot 申请证书时遇到 403 Forbidden 错误。

  1. 配置 Cloudflare API Tokens

    • 选择 “Create Custom Token”
    • 权限选择 “Zone:DNS:Edit”
    • 资源选择 “Include:All zones”
    • 创建后复制 API Token
    • 记得将你的公网 IP 地址添加到 Cloudflare API 的 客户端IP 白名单中,以避免申请证书时遇到 403 Forbidden 错误。
  2. 在Debian 上安装 Cloudflare 插件:

    1
    
    apt update && apt install python3-certbot-dns-cloudflare
  3. 在Debian上创建一个 Cloudflare API Token 的凭据文件:

    1
    
    /etc/letsencrypt/cloudflare.ini

    编辑文件,添加以下内容(将 API_Token 替换为你的实际 API Token):

    1
    
    dns_cloudflare_api_token = API_Token

    设置权限为只读,并且仅限于 DNS 编辑:

    1
    
    chmod 600 /etc/letsencrypt/cloudflare.ini
  4. 申请证书:

Caution

Certbot 默认用第一个域名作为目录名,所以即使证书包含多个域名,目录名也只会是第一个(从上往下数) -d 后面的域名。这不会影响证书的使用,但需要注意路径。

手动 DNS-01 申请(基础理解)

适合学习流程,不适合生产环境,因为需要手动添加 DNS 记录,比较麻烦。

1
2
3
4
certbot certonly \
  --manual \
  --preferred-challenges dns \
  -d example.com

执行后会提示:

1
2
3
4
5
Please create a TXT record under:
_acme-challenge.example.com

with the following value:
xxxxxx

你需要:

  • 登录 DNS 服务商后台
  • 添加 TXT 记录
  • 等待生效
  • 回车继续验证