什么是 DNS CAA
譬如说,你的站点已经启用了 HSTS,甚至已经被固化到了浏览器内部。但是一个中间人仍然劫持了你的连接。你走了 HTTPS 协议?没问题,我也搞到了一个你所访问域名的 SSL 证书。要知道 SSL 连接使用的证书是服务端决定的,但是这个证书未必就是真正的域名所有人申请的。虽然普通人未必能搞到不属于你的域名的证书,但是证书颁发机构就不一样——虽然基于信誉的原因他们不太可能会这样做,但是没有任何外在的保护防止他们颁发并非由域名所有人申请的证书。
简而言之,一个有效的证书未必就是域名所有人申请的证书。就好比普通人造不出能过验钞机的假钞,但是再强大的验钞机也不能阻止造币厂监守自盗。这时就需要一个更上层的服务去验证这个“有效的证书”的合法性,这就是 DNS CAA 的作用。
DNS Certification Authority Authorization(DNS证书颁发机构授权,简称 CAA)是一项借助互联网的域名系统(DNS),使域持有人可以指定允许为其域签发证书的数字证书认证机构(CA)的技术。它会在 DNS 下发 IP 的同时,同时下发一条资源记录,标记该域名下使用的证书必须由某证书颁发机构颁发。比如我大 EOI 的官网使用了 Let's Encrypt 颁发的免费证书,我可以同时使用 CAA 技术标记 EOI 官网域名 www.eoitek.com 使用的 SSL 证书由 Let's Encrypt 颁发,这样就可以(在一定程度上)解决上面所述的问题。
启用 DNS CAA
CAA 是 DNS 服务器下发的记录,所以首先要 DNS 服务器支持才行。EOI官网域名购买自阿里云旗下的万网,然而万网自带的 DNS 服务并不支持 CAA 资源记录。如果想体验 CAA,还得使用国外的 DNS 服务器。支持 CAA 记录的国外 DNS 服务这里有比较详细的记录:https://sslmate.com/caa/support
笔者使用的是 Hurricane Electric Free DNS 这款号称永久免费的 DNS 服务。注册账号并邮箱验证后,添加一个新的域名,注意要填写一级域名。
首先添加 DNS 解析(A)记录,指向你服务器的外网 IP
然后添加 CAA 记录。
- Name 可以直接填写顶级域名,会自动应用到多级域名。
- CAA data 填写
0 issue "证书颁发机构域名"
。
如果如果你用 Let's Encrypt 颁发的免费证书,CAA data
部分直接填写0 issue "letsencrypt.org"
即可。 - 你还可以添加一条为
0 iodef "mailto:你的邮箱"
的 CAA 记录,表示如果发现违背 CAA 记录的情况给这个邮箱发邮件通知。
如果你仍然不太清楚如何填写 CAA 记录,可以用工具直接生成:https://sslmate.com/caa/。填写域名后点 Auto-Generate Policy
,这个工具会自动查询你的网站使用了什么证书,从而生成对应的 CAA 记录数据。
填写完成后结果类似如下图(图中还添加了几条指向 EOI 公司内网的域名):
最后只需要把你域名的 DNS 服务器指向到 nsX.he.net
就好了
更改 DNS 服务器指向可能需要约两天时间生效。是否生效可以在 Hurricane Electric Free DNS
中你的域名的记录列表页查看。
检验 DNS CAA 是否生效
使用 SSL Server Test
可以很方便的检验你的域名是否启用了 DNS CAA
下面还有对应证书是否匹配当前 DNS CAA 记录的提示