DNS CAA(Certification Authority Authorization)记录是一种 DNS 记录类型,用于声明哪些证书颁发机构(CA)可以为特定域名颁发 SSL/TLS 证书。作为域名所有者,通过配置 CAA 记录,可以有效防止未经授权的证书被颁发,保护网站安全。
什么是 CAA 记录
CAA 记录于 2013 年在 RFC 6844 中定义,允许域名管理者明确指定允许为该域名颁发证书的 CA。CAA 记录的工作原理是:当 CA 收到证书申请时,会查询域名的 DNS CAA 记录,如果发现没有授权给自己,则拒绝颁发证书。
CAA 记录的作用
- 防止证书被冒领:阻止未经授权的 CA 为你的域名颁发证书
- 提升安全等级:确保只有指定的 CA 可以提供证书服务
- 审计追踪:CAA 记录可以要求 CA 在颁发证书时发送通知
CAA 记录格式详解
CAA 记录的基本格式如下:
|
|
关键字段
| 字段 | 说明 |
|---|---|
| flags | 8 位标志字段,目前使用 bit 0(关键位) |
| tag | 标签,指定 CAA 记录的类型的 |
| value | 标签对应的值 |
常用标签
CAA 记录支持多种标签,常用的包括:
| 标签 | 说明 | 示例 |
|---|---|---|
issue |
授权指定 CA 颁发证书 | issue "letsencrypt.org" |
issuewild |
授权颁发通配符证书 | issuewild "letsencrypt.org" |
iodef |
指定违规报告发送地址 | iodef "mailto:admin@example.com" |
flags 字段说明
- bit 0(关键标志):当设置为 1 时,如果 CA 不识别该标签或不支持该标签,必须停止颁发证书
- 其余位保留,必须设置为 0
配置 CAA 记录
基本配置示例
以下示例展示如何配置 CAA 记录,只允许 Let’s Encrypt 颁发证书:
|
|
允许多个 CA
如果需要允许多个 CA 颁发证书,添加多条 CAA 记录:
|
|
允许通配符证书
单独授权通配符证书颁发权限:
|
|
配置违规通知
添加 iodef 标签,当有人尝试违反 CAA 策略时,CA 会发送通知:
|
|
部分 CA 还支持 HTTP/HTTPS 方式的回调:
|
|
使用 dig 查看 CAA 记录
查询域名 CAA 记录
使用 dig 命令查询目标域名的 CAA 记录:
|
|
输出示例:
|
|
简洁输出格式
使用 +short 参数获取简化输出:
|
|
输出:
|
|
常见配置场景
只允许特定 CA
|
|
完全禁止颁发证书
如果某个域名不再需要 HTTPS,可以设置完全禁止证书颁发:
|
|
这种配置下,任何 CA 都应该拒绝为该域名颁发证书。
允许所有 CA
如果不限制 CA,不需要添加 CAA 记录。但从安全角度,建议至少指定一个可信 CA。
CAA 记录的验证机制
CA 的验证流程
- 查询 DNS:CA 在收到证书申请后,会查询域名的 CAA 记录
- 检查授权:如果存在 CAA 记录,CA 检查自己是否被授权
- 处理违规:如果未授权,CA 必须拒绝颁发证书或发送违规报告
关键标志的影响
当 CAA 记录中 flags 的 bit 0 设置为 1(关键标志)时:
- 如果 CA 不理解某个 tag,必须终止证书颁发流程
- 这确保了域名所有者的安全策略不会被忽略
验证失败场景
以下情况会导致 CA 拒绝颁发证书:
- 域名存在 CAA 记录,但未授权该 CA
- CAA 记录设置了关键标志,但 CA 不支持某个标签
- DNS 查询失败(部分 CA 会拒绝继续)
注意事项
继承规则
CAA 记录遵循 DNS 区域的继承规则:
- 子域名会继承父域名的 CAA 策略
- 子域名可以覆盖父域名的设置
例如,为 sub.example.com 设置独立的 CAA 记录不会影响 example.com 的设置。
生效时间
CAA 记录的修改需要时间传播到全球 DNS 服务器。通常需要几分钟到几小时不等。在修改 CAA 记录后,建议等待 24-48 小时后再申请新证书。
自动化工具
部分 CA 提供 CAA 记录自动检测工具,帮助验证配置是否正确:
|
|
总结
DNS CAA 记录是保护域名证书安全的重要手段。通过正确配置 CAA 记录,可以:
- 限制只有可信的 CA 才能为域名颁发证书
- 防止证书被意外或恶意颁发
- 接收违规通知,及时发现安全问题
建议所有运营 HTTPS 服务的域名都配置 CAA 记录,选择一个可信的 CA 并明确授权。