AutoSSL 通配符 DNS 验证
通配符证书必须使用 DNS 验证。它不能通过一键 HTTP 部署命令、Nginx 插件、Apache 插件或 webroot 验证签发。
当证书包含以下通配符域名时,请使用本教程:
example.com
*.example.com选择验证方式
如果需要自动续期,推荐使用 DNS API。这是生产环境部署通配符证书的推荐方式。
如果 DNS 服务商没有可用 API,或者只是临时测试,可以使用 手动 DNS。但手动 DNS 在续期时也需要人工更新 TXT 记录,不适合长期自动化。
准备信息
请先准备订单中的 AutoSSL ACME 信息:
Server URL: https://acme.sectigo.com/v2/DV
ACME account ID / EAB MAC ID: 你的 ID
EAB MAC key: 你的 key确认域名由你准备使用的 DNS 服务商管理。签发 *.example.com 时,你需要有权限在 example.com 下创建 TXT 记录。
Cloudflare DNS API
下面以 Certbot + Cloudflare DNS 为例,签发通配符证书,并把证书保存到 /etc/sectigo。
1. 创建 Cloudflare API Token
在 Cloudflare 创建 API Token,权限选择:
Zone -> DNS -> Edit
Zone -> Zone -> Read建议把 Token 限制到指定 Zone,例如 example.com。
2. 安装 Certbot 和 DNS 插件
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y certbot python3-certbot-dns-cloudflareRHEL / AlmaLinux / Rocky / CentOS:
sudo dnf install -y epel-release || sudo yum install -y epel-release
sudo dnf install -y certbot python3-certbot-dns-cloudflare || sudo yum install -y certbot python3-certbot-dns-cloudflare3. 保存 DNS API Token
sudo mkdir -p /etc/sectigo/dns
sudo tee /etc/sectigo/dns/cloudflare.ini >/dev/null <<'EOF'
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN
EOF
sudo chmod 600 /etc/sectigo/dns/cloudflare.ini4. 签发通配符证书
运行前请替换对应值:
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /etc/sectigo/dns/cloudflare.ini \
--dns-cloudflare-propagation-seconds 60 \
--config-dir /etc/sectigo \
--work-dir /var/lib/sectigo \
--logs-dir /var/log/sectigo \
--non-interactive \
--agree-tos \
--register-unsafely-without-email \
--server "https://acme.sectigo.com/v2/DV" \
--eab-kid "YOUR_ACME_ACCOUNT_ID_OR_EAB_MAC_ID" \
--eab-hmac-key "YOUR_EAB_MAC_KEY" \
--domain "example.com" \
--domain "*.example.com" \
--cert-name "example.com"证书文件位置:
/etc/sectigo/live/example.com/fullchain.pem
/etc/sectigo/live/example.com/privkey.pem5. 配置到网站服务
Nginx 配置示例:
ssl_certificate /etc/sectigo/live/example.com/fullchain.pem;
ssl_certificate_key /etc/sectigo/live/example.com/privkey.pem;然后重新加载:
sudo nginx -t
sudo systemctl reload nginxApache 配置示例:
SSLCertificateFile /etc/sectigo/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/sectigo/live/example.com/privkey.pem然后重新加载:
sudo apachectl configtest
sudo systemctl reload apache2 || sudo systemctl reload httpd集中托管模式
如果你希望由 12SSL 统一管理通配符证书的签发、续期和部署,我们可以使用集中托管模式。
在这种模式下,证书管理服务器负责:
- 自动向 CA 申请和续期证书
- 通过 DNS API 创建
_acme-challengeTXT 验证记录 - 记录证书状态、到期时间和续期结果
- 在续期成功后把证书部署到指定服务器
- 在部署失败或续期失败时提供状态记录,便于排查
订单中的 ACME 信息和证书状态会由系统自动保存,证书页面也会显示这些信息。为了完成集中托管和自动 DNS 验证,你只需要额外提供:
DNS 服务商类型
DNS Zone
DNS API Token
部署目标服务器信息DNS API Token 建议只授权指定域名的 DNS 记录编辑权限。我们不建议,也不会要求你提供 DNS 账号登录密码。
如果证书需要部署到多台服务器,还需要保存每台服务器的部署信息,例如服务器地址、Web 服务类型、证书路径和重载方式。对于安全要求更高的环境,可以使用客户端 Agent 或受限 SSH Key,让私钥保存在你的服务器本地。
自动续期
创建和一键部署工具一致的续期任务:
sudo tee /etc/systemd/system/sectigo-certbot-renew.service >/dev/null <<'EOF'
[Unit]
Description=Renew Sectigo AutoSSL certificates with Certbot
[Service]
Type=oneshot
ExecStart=/bin/bash -lc 'certbot renew --config-dir /etc/sectigo --work-dir /var/lib/sectigo --logs-dir /var/log/sectigo --quiet'
EOF
sudo tee /etc/systemd/system/sectigo-certbot-renew.timer >/dev/null <<'EOF'
[Unit]
Description=Daily Sectigo AutoSSL certificate renewal
[Timer]
OnCalendar=*-*-* 03:18:00
RandomizedDelaySec=2h
Persistent=true
[Install]
WantedBy=timers.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now sectigo-certbot-renew.timer只要 DNS API Token 保持有效,续期通常不需要人工介入。
手动 DNS 验证
只有在无法使用 DNS API 时,才建议使用手动 DNS。
sudo certbot certonly \
--manual \
--preferred-challenges dns \
--config-dir /etc/sectigo \
--work-dir /var/lib/sectigo \
--logs-dir /var/log/sectigo \
--agree-tos \
--register-unsafely-without-email \
--server "https://acme.sectigo.com/v2/DV" \
--eab-kid "YOUR_ACME_ACCOUNT_ID_OR_EAB_MAC_ID" \
--eab-hmac-key "YOUR_EAB_MAC_KEY" \
--domain "example.com" \
--domain "*.example.com" \
--cert-name "example.com"Certbot 会提示你添加一条或多条 TXT 记录,例如:
_acme-challenge.example.com在 DNS 服务商处添加 TXT 记录,等待 DNS 生效后,再回到 Certbot 提示继续。
手动 DNS 不适合无人值守续期,因为续期时 TXT 值会变化。
常见问题
- 找不到 TXT 记录:等待更长 DNS 生效时间,或确认记录添加在权威 DNS 服务商处。
- DNS 位置填错:签发
*.example.com时,TXT 通常是_acme-challenge.example.com,不是_acme-challenge.*.example.com。 - 后续续期失败:请使用 DNS API Token,并确认 Token 有编辑 TXT 记录权限。
- 证书已签发但网站仍显示旧证书:检查网站服务中的证书路径,并重新加载网站服务。
