返回资讯

tutorials

给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限

内网服务想要 HTTPS,主域 DNS 又不在自己手里?本文演示用一条 CNAME 记录把 DNS-01 验证委托到可自动化的子域,完成通配符证书的签发、续期和部署验证。

给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限

团队里有台跑在内网的 Grafana,地址是 grafana.internal.example.com。浏览器天天弹"您的连接不是私密连接",点"继续访问"点了两年。想上证书,卡在两个地方:内网 IP 没法做 HTTP-01 验证,主域 example.com 的 DNS 又是另一个部门管的,要 API 权限得走审批。

这两个坑其实都能用 DNS-01 加 CNAME 委托绕过去。

前置条件

原理一句话

DNS-01 验证要求你在 _acme-challenge.grafana.internal.example.com 下放一条 TXT 记录。ACME 服务器查询时允许跟随 CNAME,所以你可以把它指向 acme.example.net 下的某个名字,然后在那个区域里用 API 自动写 TXT。验证过了,证书就是你的——ACME 只认 DNS 控制权,不认这台服务器在哪、IP 是公网还是内网。

具体委托规则见 RFC 8555 第 8.4 节 对 DNS 挑战的定义。

步骤

1. 在主域加一次 CNAME

_acme-challenge.internal.example.com.  CNAME  _acme-challenge.internal.example.com.acme.example.net.

注意委托的对象是 _acme-challenge.<你要签的域名>。如果要签 *.internal.example.com 通配符,委托点就是 _acme-challenge.internal.example.com 本身。

2. 在 CertbotX 中配置委托区域并签发

在 CertbotX 中实践:把 acme.example.net 配置为 DNS-01 的委托凭据(填它所在 DNS 服务商的 API 密钥),然后为 *.internal.example.com 提交 ACME 签发任务。CertbotX 会识别 CNAME 委托,把 TXT 记录写到委托区域完成验证,签发成功后记录部署结果,并在到期前自动重新签发——不需要你盯着日历。

签发完成后建议顺手配置部署目标。CertbotX 支持把新证书自动推送到 Agent(装在目标服务器上的部署端)、EdgeOne 或其他 CDN,每次续期后自动更新,部署记录可审计。内网这台 Grafana 就装个 Agent,证书落地后由它触发 nginx -s reload

3. 验证证书

别只看签发成功的日志,在客户端侧验一下:

openssl s_client -connect grafana.internal.example.com:443 -servername grafana.internal.example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates

确认三点:Subject 或 SAN 覆盖你的域名、有效期是新的、issuer 是你预期的 CA。再用浏览器访问一次,锁头图标出现才算完事——内网机器记得给客户端分发对应 CA 链(公共 CA 一般不用操心,但如果走的是私有 CA 就要推根证书了)。

4. 验证续期链路

首次签发成功后,人为触发一次重新签发(大多数客户端支持 --force-renewal 之类的选项,CertbotX 里也可以手动触发任务),确认 DNS 委托写入、证书更新、部署到目标这三段链路都通。续期是这条链路的常态,首签只是开张。

几个容易踩的坑

相关文档

给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限:a hands-on operator configuring DNS and a server while a certificate moves through the deployment path
给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限:a hands-on operator configuring DNS and a server while a certificate moves through the deployment path
给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限:DNS ownership verification using a delegated CNAME, shown as a precise handoff between two controlled zones
给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限:DNS ownership verification using a delegated CNAME, shown as a precise handoff between two controlled zones
给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限:an ACME request being validated at separate stations and turned into a new deployable artifact while private key material remains at its origin
给内网域名签发通配符证书:用 DNS-01 CNAME 委托绕开 API 权限:an ACME request being validated at separate stations and turned into a new deployable artifact while private key material remains at its origin