DNSSEC 是什么?它解决了 DNS 的什么安全问题?
简化版
DNSSEC 是 DNS 的安全扩展,通过数字签名验证 DNS 记录是否真实、未被篡改。它解决的是 DNS 响应完整性和来源可信问题,但不加密查询内容,也不能隐藏你查了哪个域名。
详细版
传统 DNS 响应容易被伪造或污染,因为客户端很难确认“这个解析结果真的是权威 DNS 给的吗”。DNSSEC 给 DNS 记录加签名,并通过从根区到 TLD 再到域名区的信任链验证。
核心概念:
RRSIG:资源记录集的数字签名。DNSKEY:用于验证签名的公钥。DS:父区保存子区密钥摘要,用于建立信任链。NSEC/NSEC3:证明某个记录不存在。- DNSSEC 只保证真实性和完整性,不保证机密性。
面试要强调:DNSSEC 防篡改,不防窃听;DoH/DoT 加密传输,不等于 DNSSEC。
完整版教学
一、DNSSEC 要补 DNS 的哪块短板
普通 DNS 更关注“能解析”,安全性较弱。递归解析器收到一个 IP 响应,如果没有额外验证,很难确认它是否被中间人篡改、缓存投毒或污染。
用户查询 bank.example
攻击者伪造响应:bank.example -> 6.6.6.6
客户端若无法验证,就可能访问错误 IP
DNSSEC 的目标是让解析器能验证 DNS 数据确实来自对应权威区,且中途没有被改过。
记忆钩子:DNSSEC 给 DNS 记录加“防伪签名”,但不把查询内容装进密封信封。
二、签名验证的基本流程
DNSSEC 不是给单条字符串随便签一下,而是对资源记录集 RRset 签名。解析器拿到记录、签名和公钥后验证签名。
RRset: example.com A 1.2.3.4
RRSIG: signature over RRset
DNSKEY: public key
verify(DNSKEY, RRset, RRSIG) -> valid / invalid
如果记录被改成 6.6.6.6,原签名就验证不过。攻击者除非拿到私钥,否则无法伪造有效签名。
三、信任链如何从根传下来
只验证某个区的 DNSKEY 还不够,你还要确认这把 DNSKEY 本身可信。DNSSEC 通过父区的 DS 记录把信任往下传。
Root trust anchor
-> .com DS
-> example.com DNSKEY
-> example.com A + RRSIG
根区信任锚内置在验证解析器中;.com 父区发布 example.com 的 DS 摘要;解析器用 DS 校验子区 DNSKEY,再用 DNSKEY 验证具体记录。
四、NSEC/NSEC3 为什么存在
DNS 不只要证明“某记录存在且值正确”,还要证明“某记录确实不存在”。否则攻击者可以伪造 NXDOMAIN。NSEC/NSEC3 用于可验证地证明不存在。
| 记录 | 作用 | 代价 |
|---|---|---|
| NSEC | 证明某名称区间内无记录 | 可能暴露区域枚举信息 |
| NSEC3 | 用哈希降低枚举风险 | 验证更复杂 |
例如查询 no.example.com,权威服务器返回可验证的不存在证明,解析器能确认不是中间人伪造的“域名不存在”。
五、DNSSEC 不解决哪些问题
DNSSEC 不加密 DNS 查询。旁路观察者仍可能看到你查询了哪个域名。它也不保证解析出的 IP 一定是安全服务器,只能保证这是域名所有者发布的记录。
DNSSEC 能保证:
example.com A 1.2.3.4 没被篡改
DNSSEC 不能保证:
1.2.3.4 上的网站没有漏洞
旁观者看不到你查了 example.com
想加密查询链路,要看 DoH/DoT;想验证网站身份,要看 HTTPS 证书链。
六、部署和故障风险
DNSSEC 部署不当会让域名解析失败。比如 DS 记录和子区 DNSKEY 不匹配、签名过期、密钥轮换错误,验证解析器会把结果判为 bogus。
| 问题 | 现象 | 排查方向 |
|---|---|---|
| 签名过期 | 支持 DNSSEC 的解析器失败 | 检查 RRSIG 有效期 |
| DS 不匹配 | 整个子区验证失败 | 父区 DS 与 DNSKEY |
| 密钥轮换错误 | 部分地区解析异常 | KSK/ZSK 轮换流程 |
| 未签区被当签名区 | 验证链断裂 | DS 配置 |
所以 DNSSEC 是安全增强,但需要严谨运维。
七、常见误区与追问
- 误区:DNSSEC 会加密 DNS 请求。 DNSSEC 提供签名验证,不加密传输内容。
- 误区:有 HTTPS 就不需要 DNSSEC。 HTTPS 验证服务器身份,DNSSEC 验证解析记录未被篡改,层次不同。
- 误区:DNSSEC 只要开关打开就行。 DS、DNSKEY、签名有效期和密钥轮换都可能出故障。
- 追问:DNSSEC 能防 DNS 污染吗? 能让验证解析器发现伪造结果无效,但不能阻止网络层拦截或丢包。
- 追问:DS 记录有什么用? 父区用 DS 记录绑定子区 DNSKEY,形成信任链。
- 追问:NSEC/NSEC3 解决什么? 用可验证方式证明某个名称或记录不存在。
八、加强记忆
DNSSEC 按“签名 + 信任链 + 不加密”记:RRSIG 验记录没被改,DNSKEY/DS 建立从根到子区的信任链,NSEC/NSEC3 证明不存在;它防篡改,不防窃听。