刚刚无聊用 SSL 评分测试了一下我的小博客,其中有一项“DNS CAA”让我很疑惑呐,这是个什么东西呢?根据资料,CAA (Certification Authority Authorization)是在2013年由 RFC 6844 定义的一个标准,旨在于通过控制哪些 CA 能给一个域名签发证书提升 PKI 体系的生态圈强度。4年过去了,这个标准一直淹没在茫茫的 RFC 标准中,直到2017年3月份,CA/Browser Forum 的一个投票让这个标准重新回到人们的视线中,并且要求所有的 CA 在2017年9月7日后必须遵守这个标准。这篇文章大概就是翻译这个资料吧。

什么是 CAA 记录呢?

我们都知道,任何 CA 都可以给任何域名签发证书,这通常被认为是 PKI 生态系统中的一个弱点,尽管 CA 都在尝试做正确的事,但是从技术上来说我们无法阻止他们决定想做的事情。还记得著名的 CNNICWoSignStartComSymantec 所做的事情吗?目前有几百个 CA 都是被信任的,这或许会有很多薄弱点。

而 CAA 记录通过 DNS 的257类记录(Type 257)可以来控制哪些 CA 可以给你的域名颁发证书。你可以通过 CAA 记录将0个或更多的 CA 列入白名单,只有在白名单内的 CA 才可以给你的域名颁发证书。这样是不是感觉安全很多了呢?

yandere.moe. CAA 128 issue "letsencrypt.org"

根据最新的标准,CA 在签发证书之前要检查 CAA 记录,如果 CAA 记录存在,则检查本 CA 是否在白名单内。如果不在白名单内,则拒绝颁发证书。CAA 记录可以继承给子域名,除非子域名的 CAA 记录覆盖了设置。

在上述的 DNS 记录中,yandere.moe 这个域名设置了 CAA 记录的“issue”字段,并指定了“letsencrypt.org”。这就说明了只有 Let’s Encrypt 这个 CA 可以给 yandere.moe 及其子域名签发证书。128 这个数字是这个标记位最高可用的数字,说明这条记录是关键的,必须被遵守。

在“issue”字段之外,还可以使用“issuewild”字段来限制签发泛域名证书,使用“iodef”来在出现意外的情况下通知你(可以是 email 地址,或一个 URL)。

如果 CA 在2017年9月7日后仍然不遵守 CAA 记录怎么办呢?

那么这个 CA 就涉嫌违反 Baseline Requirements 啦,那后果可相当严重了,有很大可能被取消信任。

那么如何知道自己想用的 CA 的白名单值呢?

你可以使用这款工具来生成 CAA 记录。

生成的内容举例如下:

yandere.moe. IN CAA 0 issue "letsencrypt.org"
yandere.moe. IN CAA 0 iodef "mailto:contact@yandere.moe"

那么我该如何应用 CAA 到我的域名呢?

很简单啦,在你的 DNS 记录中添加一条 CAA 记录。下面我用 Gandi 的 DNS 控制面板举一个例子。

按照生成的记录进行填写,只要 Value 的内容和生成的记录“CAA”之后一样就可以了呢。

如果我的 DNS 里没有添加 CAA 条目的选项该怎么办呢?

只能说,你的 DNS 服务提供商是辣鸡,该换一个啦!这种情况大多数发生在中国的 DNS 服务商身上。

好啦~就聊这么多,准备去吃饭了😋

2 Comments

Leave a Reply

Your email address will not be published.