DNS CAA 记录是什么?它如何限制哪些 CA 可以签发域名证书?
简化版
CAA 记录用于声明哪些 CA 有权为某个域名签发 TLS/HTTPS 证书。
例如域名配置 CAA 0 issue "letsencrypt.org",表示只允许 Let’s Encrypt 为该域名签发普通证书。CA 在签发证书前需要查询 CAA,如果发现自己不在允许列表中,就不应该签发。
它不能替代证书透明度、证书吊销和私钥保护,但能减少误签风险,是域名证书治理里的防护层。
详细版
示例记录:
example.com. 3600 IN CAA 0 issue "letsencrypt.org"
example.com. 3600 IN CAA 0 iodef "mailto:security@example.com"
常见 tag:
issue:允许签发普通证书的 CA。issuewild:允许签发通配符证书的 CA。iodef:出现违规签发请求时的报告地址。
CA 签发证书前会检查域名及父域的 CAA 策略。
如果没有 CAA,通常表示不限制 CA;如果配置了 CAA,就要按记录约束执行。
面试里可以把 CAA 说成“域名所有者给 CA 设置的签发白名单”。
完整版教学
1. 先说明 CAA 解决什么问题
HTTPS 证书信任依赖 CA 体系。
理论上,被浏览器信任的 CA 都可能为你的域名签发证书。
如果某个 CA 误签或流程被滥用,就可能出现非授权证书。
CAA 的作用是让域名所有者在 DNS 中声明:
哪些 CA 可以给我签证书
CAA 不是加密 DNS 查询,而是约束证书签发方的授权声明。
2. CAA 记录长什么样
一条 CAA 记录通常包含 flag、tag、value。
示例:
example.com. 3600 IN CAA 0 issue "digicert.com"
example.com. 3600 IN CAA 0 issuewild "letsencrypt.org"
example.com. 3600 IN CAA 0 iodef "mailto:pki@example.com"
含义是:
- 普通证书允许 DigiCert 签发。
- 通配符证书允许 Let’s Encrypt 签发。
- 违规或异常情况可发送报告到指定邮箱。
3. issue 和 issuewild 的区别
issue 控制普通证书。
issuewild 控制通配符证书。
| tag | 控制对象 | 示例 |
|---|---|---|
| issue | 普通域名证书 | www.example.com |
| issuewild | 通配符证书 | *.example.com |
| iodef | 报告地址 | mailto:security@example.com |
如果只配置 issue,通配符签发如何处理要看具体规则和 CA 检查逻辑。
线上治理时最好把普通证书和通配符证书策略都写清楚。
4. CA 如何使用 CAA
CA 在签发证书前会查询相关域名的 CAA。
如果 api.example.com 没有 CAA,可能继续向父域 example.com 查找。
如果查到:
example.com. IN CAA 0 issue "letsencrypt.org"
而当前申请证书的 CA 不是 Let’s Encrypt,它就应该拒绝签发。
这让域名所有者可以减少“任何受信 CA 都能签”的暴露面。
5. CAA 的能力边界
CAA 是签发前约束,不是签发后检测。
| 能力 | 是否具备 | 说明 |
|---|---|---|
| 限制授权 CA | 是 | CA 签发前应查询 |
| 加密 DNS 响应 | 否 | 不是 DoH/DoT |
| 替代 CT 监控 | 否 | CT 用于公开审计 |
| 防止私钥泄露 | 否 | 私钥管理仍要做好 |
| 立刻撤销旧证书 | 否 | 吊销需要 OCSP/CRL |
所以 CAA 更适合放在证书治理体系里,而不是单独当万能安全方案。
6. 工程实践注意点
配置 CAA 前要先梳理所有签发来源。
例如:
- 主站证书由某个云厂商签发。
- CDN 边缘证书由 CDN 平台代签。
- 内部服务使用企业 CA。
- 测试域名使用 Let’s Encrypt。
如果漏掉某个合法 CA,自动续期可能失败。
配置后还要监控证书续期任务,避免证书到期才发现 CAA 阻断。
7. 常见误区与追问
- 误区:CAA 能阻止所有非法证书使用。 它约束 CA 签发,不能阻止已泄露私钥或已签发证书被使用。
- 误区:没有 CAA 表示不能签证书。 没有 CAA 通常表示不做 CA 限制。
- 误区:CAA 和 DNSSEC 是一回事。 CAA 是证书签发授权,DNSSEC 是 DNS 数据完整性验证。
- 追问:为什么配置 CAA 后证书续期失败? 可能自动签发使用的 CA 不在 CAA 白名单里。
- 追问:issuewild 有什么用? 它专门限制通配符证书的签发 CA。
- 追问:CAA 和 CT 如何配合? CAA 限制签发来源,CT 监控实际签发结果。
8. 加强记忆
CAA 记成“证书签发白名单”。
DNS 里写清楚谁能签,CA 签之前先查表。