是的,Let's Encrypt 泛域名证书在首次申请和后续续签时,都必须使用 DNS 验证方式,无法使用 HTTP 验证。
先说结论:泛域名证书的性质决定了它只能通过 DNS-01 挑战来验证所有权,续签时规则不变。
- 适合:所有需要保护主域名及所有子域名的场景
- 先准备:确保证书管理工具拥有 DNS 服务商的 API 权限或人工修改记录的能力
- 验收:续签后检查证书有效期是否更新且包含泛域名标识
命令与插件准备
通常情况下,Certbot 会自动读取初次申请时的配置,续签只需运行基础命令。但需确保已安装对应 DNS 服务商的插件。
1. 安装 DNS 插件
根据你的 DNS 服务商选择对应的插件,例如 Cloudflare 或 阿里云:
# Cloudflare 示例
apt install python3-certbot-dns-cloudflare
# 阿里云 示例
pip install certbot-dns-aliyun2. 执行续签
自动化续签(推荐):直接运行以下命令,Certbot 会读取 `/etc/letsencrypt/renewal/` 下的配置文件自动匹配验证方式。
certbot renew手动强制指定(仅当自动读取失败时):需明确指定 authenticator 和凭证路径。
certbot renew `--authenticator` dns-cloudflare `--dns-cloudflare-credentials` /path/to/creds.ini `--dry-run`配置文件检查
如果自动续签失败,请检查 Renewal 配置文件是否保留了 DNS 验证信息。
1. 查看配置路径
配置文件通常位于:
/etc/letsencrypt/renewal/example.com.conf2. 核对关键参数
使用 cat 查看文件,确认 authenticator 字段不是 standalone 或 webroot,而应是对应的 DNS 插件名。
authenticator = dns-cloudflare
dns_cloudflare_credentials = /path/to/creds.ini若配置错误,可重新运行申请命令并添加 `--force-renewal` 参数修正配置。
为什么会这样
这是 ACME 协议和 Let's Encrypt 策略的共同限制。HTTP-01 验证方式只能证明你对某个具体域名(如 www.example.com)的服务器有控制权,无法证明你拥有该域名下的所有子域名。
泛域名证书(*.example.com)涵盖无限个子域,HTTP 验证无法覆盖这种范围。因此,CA 机构要求必须通过 DNS 记录验证,因为只有在域名管理后台添加 TXT 记录,才能证明你拥有整个域名的管理权。这一规则在签发和续签时保持一致。
分步处理
1. 确认当前证书类型:检查现有证书是否为泛域名。使用命令 openssl x509 -in /path/to/cert.pem -text -noout | grep DNS,查看输出中是否包含 DNS:*.example.com。
2. 准备 DNS 验证环境:续签通常依赖自动化脚本。检查你的定时任务(crontab)或容器配置,确认 DNS API Key 是否过期。如果是手动维护,准备好在域名控制台添加 TXT 记录。
3. 执行续签命令:运行续签命令。建议使用 `--dry-run` 参数先测试流程,确认无误后再正式执行。
4. 重载服务:证书文件更新后,Web 服务器不会自动加载新证书。Nginx 执行 nginx -s reload,Apache 执行 systemctl reload apache2。
怎么验证是否生效
1. 命令行检查:使用 openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -dates 查看 Not After 日期是否已延后。
2. 浏览器检查:访问任意子域名(如 test.example.com),点击地址栏锁图标,查看证书有效期和主题备用名称(SAN)中是否包含泛域名。
3. 日志确认:查看 Certbot 日志(通常在 /var/log/letsencrypt/letsencrypt.log),搜索 "Successfully renewed" 关键字,确认无报错。
常见坑
1. 速率限制锁死:Let's Encrypt 对验证失败有严格限制(每小时每域名最多 5 次失败)。若续签报错,请至少等待 1 小时后再重试,不要频繁提交请求。
2. DNS 传播延迟:手动添加 TXT 记录后,全球 DNS 生效需要时间。若验证失败,等待 1-5 分钟再重试。
3. API 权限变更:部分 DNS 服务商可能会轮换 API 密钥或调整权限策略。续签失败时,优先检查凭证文件是否依然有效。
4. 遗漏主域名:申请泛域名证书时,建议同时包含主域名(example.com)和泛域名(*.example.com)。仅申请泛域名有时会导致主域名无法匹配,具体取决于客户端实现。
参考来源
- Let's Encrypt Official FAQ, "Does Let's Encrypt issue wildcard certificates?", https://letsencrypt.org/docs/faq/
- Certbot Documentation, "Getting certificates", https://certbot.eff.org/docs/using.html
- ACME Protocol RFC 8555, Section 8.3, https://www.rfc-editor.org/rfc/rfc8555.html