DANE (基于 DNS 的命名实体认证)
定义
DANE 是一种利用经 DNSSEC 签名的 TLSA 记录,把 TLS 服务器的证书或公钥与其域名绑定起来的协议。
DANE 由 RFC 6698 定义,邮件传输场景的用法见 RFC 7672。域名所有者发布 TLSA 记录,声明某个端口上的服务必须出示哪张证书或哪个公钥。这些记录由 DNSSEC 签名,做了 DNSSEC 校验的客户端就可以信任它们,而不必完全依赖公共 CA 体系。根据记录中“用途”字段的不同,DANE 可以在常规 CA 校验之上增加约束,也可以完全取代 CA 校验,例如用来认证私有 CA 签发的证书。
为什么重要
DANE 目前主要的实际部署场景是邮件服务器之间的 SMTP。没有 DANE 时,发信服务器看到 STARTTLS 一般只加密不校验证书,攻击者还能把 TLS 整个剥掉;有了 DANE,做校验的发信方知道对这个目的地必须用 TLS、也知道应当看到哪个密钥,降级和截获都会失败。Postfix 等常见邮件传输代理都支持 DANE。浏览器则不使用 DANE 校验 HTTPS。代价在运维上:域名各级的 DNSSEC 必须正常,密钥更换前要先更新 TLSA 记录,否则发往该域名的邮件会投递失败。启用前要确认 DNS 服务商和域名注册商都支持 DNSSEC。
例子
dig +dnssec TLSA _25._tcp.mail.example.com
# _25._tcp.mail.example.com. 3600 IN TLSA 3 1 1 <服务器公钥的 SHA-256>
# ……以及 RRSIG 记录;如果解析器完成了校验,还会带 ad 标志
常见误区
- 不开 DNSSEC 也能用 DANE。 DANE 客户端会忽略未签名的 TLSA 记录,因为能伪造 DNS 的人同样能伪造它们。
- 浏览器会校验 DANE。 主流浏览器都不为 HTTPS 校验 TLSA 记录,DANE 主要用于邮件。
- 用了 DANE 就不需要 CA 签发的证书。 只有 DANE-TA 和 DANE-EE 两种用途会绕开 CA 校验;很多运维者仍使用公共信任证书,以兼容不支持 DANE 的客户端。