术语表

DNSSEC (DNS 安全扩展)

最后核实

定义

DNSSEC 是一组 DNS 扩展,让解析器能沿着从根区开始的签名链,验证 DNS 应答确实来自权威方且未被篡改。

DNSSEC 由 RFC 4033 至 4035 规定,为 DNS 加上数字签名。每个签名区用 DNSKEY 记录发布公钥,用 RRSIG 记录为各组记录签名;父区发布 DS 记录(子区密钥的哈希),于是信任从根区(2010 年起签名)经顶级域一路传到你的域名。NSEC 或 NSEC3 记录则对“该名字不存在”给出带签名的证明。做校验的解析器验证完整条链后,会把应答标记为已认证。

为什么重要

普通 DNS 应答可以被伪造或篡改,攻击者借此把流量引到别处。对 HTTPS 来说,证书仍负责认证服务器,但不少与证书相关的机制依赖 DNS 的真实性:DANE 和 TLSA 记录离开 DNSSEC 就毫无意义;CA 查询 CAA 记录、做 DNS 方式的域名验证也依赖 DNS,签名的区能让这些检查更难被绕过。DNSSEC 只保证完整性,不提供机密性,查询和应答在传输中依然可见。最大的运维风险是把解析搞挂:比如更换 DNS 服务商或轮换密钥时没有同步更新注册商处的 DS 记录,做校验的解析器就会对整个域名返回 SERVFAIL。启用前要确认 DNS 服务商(如 DNSPod、阿里云解析)和域名注册商都支持 DNSSEC 并能提交 DS 记录。

例子

dig +dnssec example.com A     # 查看 RRSIG 记录和 ad 标志
dig +short DS example.com     # 父区中发布的 DS 记录
delv example.com A            # BIND 自带的校验查询工具,成功时输出 "; fully validated"

常见误区

  • DNSSEC 会加密 DNS。 它只做签名。加密查询是 DNS over TLS 或 DNS over HTTPS 的事。
  • 有了 DNSSEC 就不需要 HTTPS 证书。 浏览器不使用 DNSSEC 认证网站服务器,证书依然必不可少。
  • 在 DNS 服务商那里打开开关就够了。 只有在注册商处提交了 DS 记录,信任链才完整。迁移 DNS 服务商时要规划好密钥和 DS 的切换,否则对做校验的解析器来说域名会直接无法解析。

延伸阅读