CAA记录(证书颁发机构授权)

电子邮件和安全
DNS记录,指定允许为域名颁发SSL/TLS证书的证书颁发机构。
← 返回词汇表

什么是CAA记录?

CAA(证书颁发机构授权)记录是指定哪些证书颁发机构(CA)被允许为域签发SSL/TLS证书的DNS记录类型。CAA充当安全控制,防止未授权的证书颁发,即使攻击者破坏CA也是如此。

为什么CAA记录很重要

没有CAA记录,数百个受信任的CA中的任何一个都可以为你的域颁发证书。这会产生风险:

CAA记录通过限制可以为你的域颁发的CA来减少攻击面。

CAA如何工作

1. 域所有者发布 DNS中的CAA记录

2. 证书请求者要求CA颁发证书

3. CA检查 CAA记录的域

4. CA仅在授权时发行(或不存在CAA记录)

5. 如果未授权,CA必须拒绝请求

强制CA检查

自2017年9月起,所有CA都必须在颁发证书前检查CAA记录。这是CA/浏览器论坛基线要求的一部分。

CAA记录格式

example.com.    IN    CAA    0 issue "letsencrypt.org"

组件:

属性标签

标签目的示例
issue为所有证书授权CAissue "letsencrypt.org"
issuewild为通配符证书授权CAissuewild "digicert.com"
iodef报告未授权尝试iodef "mailto:security@example.com"

CAA记录示例

单个CA(仅Let's Encrypt)

example.com.    CAA    0 issue "letsencrypt.org"

多个CA

example.com.    CAA    0 issue "letsencrypt.org"

example.com. CAA 0 issue "digicert.com"

example.com. CAA 0 issue "sectigo.com"

通配符限制

允许Let's Encrypt进行常规证书,DigiCert进行通配符:

example.com.    CAA    0 issue "letsencrypt.org"

example.com. CAA 0 issuewild "digicert.com"

拒绝所有(无证书)

用于永远不应该有证书的域:

example.com.    CAA    0 issue ";"

带报告

example.com.    CAA    0 issue "letsencrypt.org"

example.com. CAA 0 iodef "mailto:security@example.com"

常见CA标识符

CA标识符
Let's Encryptletsencrypt.org
DigiCertdigicert.com
Sectigo(Comodo)sectigo.com
GlobalSignglobalsign.com
GoDaddygodaddy.com
Amazonamazon.com
Google信任服务pki.goog

查看你的CA文档获取确切的标识符使用。

实施CAA记录

通过DNS提供商

大多数DNS提供商在其界面中支持CAA记录。

通过区文件

; 允许Let's Encrypt和DigiCert

@ IN CAA 0 issue "letsencrypt.org"

@ IN CAA 0 issue "digicert.com"

@ IN CAA 0 iodef "mailto:security@example.com"

CAA继承

CAA记录遵循DNS层次结构:

example.com.        CAA    0 issue "letsencrypt.org"     ; 适用于所有

api.example.com. CAA 0 issue "digicert.com" ; api的覆盖

检查CAA记录

使用dig
dig example.com CAA

; 答案部分:

example.com. 300 IN CAA 0 issue "letsencrypt.org"

使用DomScan
curl "https://domscan.net/v1/health?domain=example.com"

# 在安全详情中报告hasCAA

CAA最佳实践

1. 始终配置CAA:减少你的攻击面

2. 包含你使用的所有CA:不要忘记CDN/云提供商CA

3. 设置iodef:获得未授权尝试通知

4. 在执行前测试:验证你的CA仍能颁发

5. 保持记录更新:在请求证书前添加新CA

常见CAA问题

证书续期失败:CA不在CAA记录中——在证书过期前添加 CDN证书失败:CDN提供商的CA未授权——检查你的CDN使用哪个CA 缺失子域CAA:子域继承父CAA——如果需要设置特定记录

CAA是简单但强大的安全控制,每个域都应该实施。

将知识付诸实践

使用 DomScan 的 API 检查域名可用性、健康状态等。