我有一个域名,比如说 sameer.com,在 namecheap 中管理。
还有一个域名,product.com,在 AWS Route53 中管理。
sameer.com 存在以下 DNS 记录:
CNAME quotes.sameer.com sameer.product.com
CAA sameer.com 0 issue "lenscrypt.org"
以及 product.com 的以下记录:
A *.product.com <AWS_LOADBALANCER>
现在,如果我运行dig quotes.sameer.com
,它会解析为 AWS 负载均衡器 IP 地址。
到目前为止,一切都很好。
现在,如果我尝试通过 AWS 为域颁发证书quotes.sameer.com
,ACM 会抛出 CAA 错误,因为 Amazon 不允许颁发证书。
现在我可以做两件事。
- 在根域 sameer.com 下添加 CAA 记录(在 namecheap 中)
- 在 sameer.product.com 下添加 CAA 记录(在 Route53 中)
现在,如果我添加 CAA 记录
CAA sameer.product.com 0 issue "amazon.com"
,
AWS 就能够成功颁发证书。
但是,一旦我添加了此 CAA 记录,该dig quotes.sameer.com
命令就不会解析。
当我 时ping quotes.sameer.com
,它显示“未知主机”。
我认为 CAA 记录不应该干扰 CNAME 解析。
请帮忙。我这里遗漏了什么?
答案1
您需要了解 CNAME 和 CAA 记录的工作原理。
RFC 2181, 10.1CNAME 资源记录
DNS
CNAME
(“规范名称”)记录用于提供与别名关联的规范名称。对于任何一个别名,可能只有一个这样的规范名称。该名称通常应该是 DNS 中其他地方存在的名称,尽管在极少数情况下,DNS 中未定义附带规范名称的别名。CNAME
如果使用 DNSSEC,别名(记录标签)可能具有SIG
、NXT
和KEY
RR,但可能没有其他数据。
另一方面,RFC 6844, 3定义...
可以通过在同一个域名上发布多个 CAA RR 将多个属性与该域名关联。
和...
定义了以下属性标签:
issue <Issuer Domain Name> [; <name>=<value> ]*
:颁发属性条目授权域名持有者或在该域名持有者的明确授权下行事的一方为发布该属性的域颁发证书。
可能的解决方案:
CAA
在域 APEX添加记录并继续使用CNAME
:example.org. CAA 0 issue "lenscrypt.org" example.org. CAA 0 issue "amazon.com" quotes.example.org. CNAME example-org.example.com.
添加
CAA
记录并CNAME
用记录替换。当更改时A
,您需要更新记录。A
example-org.example.com.
example.org. CAA 0 issue "lenscrypt.org" quotes.example.org. CAA 0 issue "amazon.com" quotes.example.org. A 192.0.2.1
将
CAA
记录添加到典范(CNAME
) 主机名并继续使用CNAME
,例如,example.org. CAA 0 issue "lenscrypt.org" quotes.example.org. CNAME example-org.example.com. example-org.example.com. CAA 0 issue "amazon.com"
在这里,将在别名
quotes.example.org
(#3; )之前CNAME example-org.example.com.
搜索记录,因为CAA
example.org
RFC 6844,4定义顺序如下:例如,如果请求证书,
X.Y.Z
颁发者将按以下顺序搜索相关的 CAA 记录集:X.Y.Z
- 别名 (
X.Y.Z
) Y.Z
- 别名 (
Y.Z
) Z
- 别名 (
Z
) - 返回空
但是,此订单中缺少别名(此处
example.com
)的父域,因此您需要CAA
为每个子域添加不同的记录。
答案2
已修复此问题。感谢 @Esa Jokinen
dig quotes.sameer.com
在我添加 CAA 记录后无法解析,因为当找到特定资源集时(无论是 A 记录、CAA 等),它不会检查同一域的通配符,在我的情况下是*.product.com
So
CAA sameer.product.com 0 issue "amazon.com"
hides
A *.product.com <AWS_LOADBALANCER>
因此解决方案是添加另一条 A 记录sameer.product.com
:
A sameer.product.com <AWS_LOADBALANCER>