Appendix C. Authentication Examples (认证示例)
Appendix C. Authentication Examples (认证示例)
本节中的示例展示了如何认证附录 B 中的响应消息。
C.1. Authenticating an Answer (认证应答)
附录 B.1 中的查询返回了 x.w.example.com 的 MX RRset。相应的 RRSIG 指示 MX RRset 是由算法 5 和密钥标签 38519 的 "example" DNSKEY 签名的。解析器需要相应的 DNSKEY RR 才能认证此应答。下面的讨论描述了解析器如何获取此 DNSKEY RR。
RRSIG 指示 MX RRset 的原始 TTL 为 3600, 并且为了认证目的, 当前 TTL 被替换为 3600。RRSIG labels 字段值 3 指示应答不是通配符扩展的结果。x.w.example.com MX RRset 被放置为规范形式, 并且假设当前时间落在签名起始和到期日期之间, 则签名得到认证。
C.1.1. Authenticating the Example DNSKEY RR (认证示例 DNSKEY RR)
此示例展示了从配置的根 DNSKEY (或 DS RR) 开始并沿着树向下移动以认证所需的 "example" DNSKEY RR 的逻辑认证过程。请注意, 逻辑顺序是为了清晰而呈现的。实现可以选择在接收到引用时构建认证, 或仅在获得所有 RRset 后构建认证链, 或以任何其他它认为合适的组合方式。这里的示例仅演示逻辑过程, 不规定任何实现规则。
我们假设解析器从根区域的配置 DNSKEY RR (或根区域的配置 DS RR) 开始。解析器检查此配置的 DNSKEY RR 是否存在于根 DNSKEY RRset 中 (或 DS RR 是否与根 DNSKEY RRset 中的某个 DNSKEY 匹配), 此 DNSKEY RR 是否已签名根 DNSKEY RRset, 以及签名生命周期是否有效。如果满足所有这些条件, 则 DNSKEY RRset 中的所有密钥都被视为已认证。然后解析器使用一个 (或多个) 根 DNSKEY RR 来认证 "example" DS RRset。请注意, 解析器可能必须查询根区域以获取根 DNSKEY RRset 或 "example" DS RRset。
一旦使用根 DNSKEY 认证了 DS RRset, 解析器就会检查 "example" DNSKEY RRset 以查找与其中一个经过认证的 "example" DS RR 匹配的某个 "example" DNSKEY RR。如果找到这样匹配的 "example" DNSKEY, 解析器检查此 DNSKEY RR 是否已签名 "example" DNSKEY RRset 并且签名生命周期有效。如果满足这些条件, 则 "example" DNSKEY RRset 中的所有密钥都被视为已认证。
最后, 解析器检查 "example" DNSKEY RRset 中的某个 DNSKEY RR 使用算法 5 并具有密钥标签 38519。此 DNSKEY 用于认证响应中包含的 RRSIG。如果多个 "example" DNSKEY RR 匹配此算法和密钥标签, 则尝试每个 DNSKEY RR, 如果任何匹配的 DNSKEY RR 按照上述方式验证签名, 则应答得到认证。
C.2. Name Error (名称错误)
附录 B.2 中的查询返回了证明请求的数据不存在且不适用通配符的 NSEC RR。通过验证两个 NSEC RR 来认证否定回复。NSEC RR 的认证方式与上面讨论的 MX RRset 的认证方式相同。
C.3. No Data Error (无数据错误)
附录 B.3 中的查询返回了证明请求的名称存在但请求的 RR 类型不存在的 NSEC RR。通过验证 NSEC RR 来认证否定回复。NSEC RR 的认证方式与上面讨论的 MX RRset 的认证方式相同。
C.4. Referral to Signed Zone (对签名区域的引用)
附录 B.4 中的查询返回了对签名的 "a.example." 区域的引用。DS RR 的认证方式与上面讨论的 MX RRset 的认证方式相同。此 DS RR 用于认证 "a.example" DNSKEY RRset。
一旦使用 "example" DNSKEY 认证了 "a.example" DS RRset, 解析器就会检查 "a.example" DNSKEY RRset 以查找与 DS RR 匹配的某个 "a.example" DNSKEY RR。如果找到这样匹配的 "a.example" DNSKEY, 解析器检查此 DNSKEY RR 是否已签名 "a.example" DNSKEY RRset 并且签名生命周期有效。如果满足这些条件, 则 "a.example" DNSKEY RRset 中的所有密钥都被视为已认证。
C.5. Referral to Unsigned Zone (对未签名区域的引用)
附录 B.5 中的查询返回了对未签名的 "b.example." 区域的引用。NSEC RR 证明没有 DS RR 与 "b.example." 委托相关联。NSEC RR 的认证方式与上面讨论的 MX RRset 的认证方式相同。
解析器确定 "b.example." 是未签名区域, 并且来自 "b.example." 的应答将是不安全的。
C.6. Wildcard Expansion (通配符扩展)
附录 B.6 中的查询导致了通配符扩展。检查 RRSIG labels 字段显示应答是通配符扩展的结果。"*.w.example." 通配符名称被放置为规范形式并按照附录 C.1 中的方式认证。解析器还必须验证 NSEC RR 以证明区域中不存在将被使用而不是通配符匹配的更近的匹配。
C.7. Wildcard No Data Error (通配符无数据错误)
附录 B.7 中的查询使用通配符应答, 但响应是 "无数据" 响应。RRSIG 中 RRSIG labels 字段值 2 指示 NSEC RR 源自通配符并提供通配符名称。"*.w.example." 通配符 NSEC RR 按照附录 C.1 中的方式认证。解析器还必须验证 NSEC RR 以证明区域中不存在将被使用而不是通配符匹配的更近的匹配。
C.8. DS Child Zone No Data Error (DS 子区域无数据错误)
附录 B.8 中的查询被发送到子区域并返回了显示子区域中不存在 DS RR 的 NSEC RR。请注意, NSEC RR 指示子区域顶点存在 SOA RR, 这允许解析器确定此应答来自子区域而不是父区域。NSEC RR 的认证方式与上面讨论的 MX RRset 的认证方式相同。