域名系统安全扩展 (DNSSEC) 是一套扩展,它通过使 DNS 响应可以进行验证来提高域名系统 (DNS) 协议的安全性。 DNSSEC 提供源颁发机构、数据完整性以及已验证的否认存在。 借助 DNSSEC,可以大大减少 DNS 协议受到的特定类型的攻击,尤其是 DNS 欺骗攻击。
DNSSEC 的工作原理
当与支持 DNSSEC 的权威 DNS 服务器一起使用时,可以通过一种称为区域签名的过程,使用 DNSSEC 来保护 DNS 区域。 使用 DNSSEC 对区域签名可向区域添加验证支持,而不会更改 DNS 查询和响应的基本机制。
可通过使用 DNS 响应中包含的数字签名来进行 DNS 响应验证。 这些数字签名包含在 DNSSEC 相关资源记录中,而这些记录会在区域签名过程中生成并添加到区域。
核心 DNSSEC 扩展在以下征求意见文档 (RFC) 中指定。
下图显示进行区域签名前后区域 contoso.com 的 DNS 资源记录示例。
有关其中每个资源记录的详细信息,请参阅 DNSSEC 资源记录。
DNSSEC 资源记录
下表显示用于 DNSSEC 的资源记录类型。
资源记录类型 | 说明 |
---|---|
资源记录签名 (RRSIG) | 使用 DNSSEC 生成的签名包含在 RRSIG 记录中。 每个 RRSIG 记录都与区域中它为其提供数字签名的另一个记录匹配。 当解析程序为某个名称发出查询时,响应中会返回一个或多个 RRSIG 记录。 |
下一代安全 (NSEC) | NSEC 记录用于证明 DNS 名称不存在。 NSEC 记录可防止旨在欺骗 DNS 客户端相信 DNS 名称不存在的欺骗攻击。 |
下一代安全 3 (NSEC3) | NSEC3 是 NSEC 的替换或替代项,可防止区域遍历。 区域遍历是指重复 NSEC 查询以检索区域中全部名称的过程。 运行 Windows Server 2012 或更高版本操作系统的 DNS 服务器同时支持 NSEC 和 NSEC3。 可以通过 NSEC 或 NSEC3 对区域进行签名,但不能同时利用二者。 |
下一代安全 3 参数 (NSEC3PARAM) | NSEC3PARAM 记录用于确定要包含在针对不存在 DNS 名称的响应中的 NSEC3 记录。 |
DNS 键 (DNSKEY) | DNSKEY 资源记录存储用于验证签名的公用加密密钥。 DNSKEY 记录在验证过程中由 DNS 服务器使用。 DNSKEY 记录可以存储用于区域签名密钥 (ZSK) 或密钥签名密钥 (KSK) 的公钥。 |
委派签名者 (DS) | DS 记录是用于保护委派的 DNSSEC 记录类型。 DS 记录用于构建到子区域的身份验证链。 |
除了 DS 记录,所有这些记录都会在使用 DNSSEC 进行签名时自动添加到区域。 DS 记录是特殊记录,可以手动添加到父区域以创建子区域的安全委派。 例如,contoso.com 区域可以包含 secure.contoso.com 的 DS 记录。 但是,此记录必须在父区域中创建,或者在子区域中创建,然后传播到父区域。 对区域进行签名时,不会自动创建 DS 记录。
NSEC 或 NSEC3 记录会在区域签名过程中自动添加到区域。 但是,已签名的区域不能同时具有 NSEC 和 NSEC3 记录。 添加到区域的记录类型(NSEC 或 NSEC3)取决于如何配置区域签名。 在前面的示例中,使用 NSEC3 对区域进行签名。
信任密钥
DNSKEY 和 DS 资源记录也称为信任密钥或信任点。 信任密钥必须分发到为已签名区域执行 DNS 响应的 DNSSEC 验证的所有非权威 DNS 服务器。 如果 DNS 服务器在域控制器上运行,则信任锚将存储在 Active Directory 域服务 (AD DS) 的林目录分区中,并可复制到林中的所有域控制器。 在独立的 DNS 服务器上,信任锚存储在名为 TrustAnchors.dns
的文件中。
使用 Windows PowerShell 通过 Get-DnsServerTrustAnchor 命令查看区域的信任密钥。 若要查看服务器上的所有当前信任点,请使用 Get-DnsServerTrustPoint PowerShell 命令。 运行 Windows Server 2012 或更高版本操作系统的 DNS 服务器还会在“信任点”容器的 DNS 管理器控制台树中显示已配置的信任密钥。
后续步骤
若要详细了解 DNSSEC 如何使用资源记录来验证和保护 DNS 响应,请参阅验证 DNS 响应。