有没有办法让一个域good.com
承诺它会签署它的所有 DNS 记录,并且任何主机的任何未签名记录都*.good.com
应该被拒绝?换句话说,区域是否有办法提供签名声明,表明它受 DNSSEC 保护,并建议 DNSSEC 客户端可以对该区域中的 DNS 记录使用严格的签名检查?
这类似于 HSTS 记录(其中站点选择仅使用 HTTPS,并建议浏览器应拒绝通过不安全的 HTTP 进行连接的任何尝试),或选择进行严格检查的 SPF 策略(声明不符合要求的电子邮件) SPF 政策应该被拒绝)。
背景(据我所知)。原则上,DNSSEC 提供对中间人攻击的保护:客户端可以检查 DNS 响应是否具有有效签名,并忽略所有未签名的响应和具有无效签名的响应。不幸的是,在实践中,这具有不可接受的兼容性成本。如果您将所有未签名的响应视为无效,那么您“破坏了 Internet”:某些站点停止工作,要么是因为域没有始终如一地签署所有记录,要么(我被告知)因为签名偶尔会被中间盒剥离。
结果,出于实际部署的原因,许多支持 DNSSEC 的客户端实际上是非验证的:它们查看签名,但如果签名丢失,它们仍然接受 DNSSEC 响应。(在某些情况下,即使是 Google 的公共 DNS 解析器也会这样做。)
这会引发令人讨厌的中间人攻击:中间人只是简单地剥离所有 DNSSEC 签名,然后根据自己的喜好修改记录。如果客户端接受未签名的 DNS 响应,则此中间人攻击会否定 DNSSEC 的值。当然,这种不愉快情况的另一面是,如果客户端拒绝所有未签名的 DNS 响应,那么它可能会抵御中间人攻击,但许多旧站点将停止工作,从而导致无法接受的兼容性成本。至少,这是我的理解。
如果支持 DNSSEC 的客户端有办法判断哪些区域应该使用严格的签名验证,您可以想象一个更好的解决方案。特别是,如果google.com
或good.com
有办法声明“我保证我的所有 DNS 记录都将被签名,并且我希望您将任何未签名的记录视为无效”,那么合作客户端可以对 DNS 记录进行严格验证*.good.com
,同时对其他区域无效。这可能允许与旧域具有良好的兼容性,同时允许严格检查想要加入它的区域,换句话说,在不“破坏 Internet”的情况下提供针对中间人攻击的部分保护。
这样的机制存在吗?