证书颁发机构授权 (CAA) DNS 记录类型包括一个issue
参数(也issuewild
),该参数指定允许为您的域颁发证书的证书颁发机构的标识符。这没问题,但有点模糊。
在设置您自己的 CAA 记录中的值时,您应该如何找出您的 CA 的确切值?对于 letsencrypt,他们提供了一份文档这里提到他们的问题标识符是letsencrypt.org
,并且也记录在他们的认证实践声明第 4.2.1 节。如果我检查证书,我可以看到其中的各种字段,但是,没有一个字段与此字符串完全匹配,尽管有一些字段包含它。这似乎不是一种确保 CA 与 CAA 记录中的内容相匹配的严格或可靠的方法 - 例如,是什么阻止了它被匹配letsencrypt.org.evilcorp.com
?
从人的角度来看,这一切都是可行的,但机器可读性不强,并且是该 CA 所独有的。
我也有来自 Comodo 的证书,我发现各种非权威来源都说他们的 CAA 发行 ID 是comodoca.com
(其他人说是comodo.com
),但我没有找到像 letsencrypt 那样的官方文档。该comodoca.com
字符串确实出现在我的证书的某些字段中,但不在我期望可靠找到它的上下文中 - 例如,发行者名称是COMODO ECC Domain Validation Secure Server CA (COMODO CA Limited from GB)
,CRL 是http://crl.comodoca.com/COMODOECCDomainValidationSecureServerCA.crl
,OCSP URI 是http://ocsp.comodoca.com
。
SSLMate 有一个CAA 记录生成器它包含 CA 及其发行者 ID 的列表 - 但这些信息是从哪里获得的?
现在考虑验证情况 - 给定一个证书和一个或多个 CAA 颁发者 ID,我们应该期望证书中的哪些元素与 CAA 颁发者完全匹配?或者这些信息是从 CT 日志等其他服务获得的?
那么,简而言之,应该从哪里获取 CAA 发行者 ID,以及如何可靠地验证它们?
答案1
相关RFC 6844
没有为发行人强制要求任何标准,事实上恰恰相反,它赋予了几乎完全的自由:
发行者参数的语义由发行者独自决定。
但退一步来说:据我所知,CAA 记录并非旨在被最终用户用来验证他们收到的 TLS 证书是否由正确的证书颁发者颁发。
它仅供(信誉良好的)证书颁发者使用,以验证他们是否被允许为该主机/域颁发(新)证书。
只有证书颁发者才需要检查他们期望/要求的内容是否存在于 CAA 记录中(如果存在 CAA 记录)。
您的证书颁发者,即您的 CA,将需要传达他们在 CAA 颁发记录中识别哪些域。以及它们需要哪些其他参数(如果有)。
例如:Comodocomodo.com
以其在线品牌使用 CAA 记录,可以完全免费识别完全不同的域名comodoca.com
。实际上,CA 也不限于只识别单个域名 - 例如,Comodo 可以识别四个不同的: comodo.com
, comodoca.com
, usertrust.com
和 trust-provider.com
笔记:CAA 记录仅在颁发证书时使用。从已颁发的有效证书中逆向工程 CAA 记录应该是什么,没有任何直接作用。
应该从哪里获取 CAA 发行者 ID?
据我所知,没有什么可以轻易自动化解决此问题的方法,但可以采用手动方法:CA/浏览器论坛需要发布该信息的统一位置:
自 2017 年 9 月 8 日起生效,CA 证书政策第 4.2 节和/或认证实践声明将说明 CA 处理完全合格域名 CAA 记录的政策或做法;该政策应与这些要求一致。应明确规定issue
CA 在 CAA“ ”或“ issuewild
”记录中识别并允许其颁发的颁发者域名集。