什么是 DNSSEC?

DNSSEC 是域名系统的安全扩展,给域名解析结果加上数字签名,让解析器能验证响应有没有被篡改。域名系统原本默认不验证数据真假,这正是缓存投毒能得手的原因。DNSSEC 从根区逐级建立签名链来补上这一环。

第 65 期介绍过,攻击者可以向解析器塞入伪造的解析结果,让用户被导向错误网站。这类缓存投毒能得手的一个前提,是域名系统(DNS)在原始设计里不验证响应数据的真假:解析器收到应答,默认相信它来自正确的服务器、内容没有被改动。DNSSEC(Domain Name System Security Extensions,域名系统安全扩展)就是为补上这一验证环节而设计的。

DNSSEC 的核心是数字签名。一个启用 DNSSEC 的区域,会用密钥对区域里的记录签名,解析器拿到应答后,用公开的密钥验证签名是否匹配,从而确认数据没有被篡改。签名由两类密钥分工完成:区域签名密钥(ZSK)负责日常签名,密钥签名密钥(KSK)负责给区域签名密钥签名,两者分开便于轮换。

签名要可验证,需要有信任起点。DNSSEC 从根区开始逐级建立信任链:根区签名,其下各级区域通过 DS 记录与上级衔接,一路追溯到根。根区在 2010 年完成签名,成为整条链的信任锚。解析器只要配置了根区的信任锚,就能逐级验证下级区域的签名。

DNSSEC 验证的是数据真实性,不加密数据内容,域名解析的请求和应答仍然是明文。它的部署是逐区域推进的,一个域名是否启用 DNSSEC,由该区域自行决定。