4. 解析 (Resolving)
本节描述包含安全感知解析器功能的实体的行为. 在很多情况下, 这些功能是安全感知递归名称服务器的一部分.
4.1. EDNS 支持 (EDNS Support)
安全感知解析器的实现 MUST 支持 EDNS0 消息大小扩展, MUST 支持至少 1220 个八位组的消息大小, 并且 SHOULD 支持 4000 个八位组的消息大小.
4.2. 签名验证支持 (Signature Verification Support)
安全感知解析器 MUST 支持第 5 节描述的签名验证机制, 并且 MUST 将其应用于收到的每个响应, 以下情况除外:
- 安全感知解析器是安全感知递归名称服务器的一部分, 且该响应是代表一个设置了 CD 位的查询执行递归得到的结果
- 该响应是通过某种应用接口直接生成查询得到的结果, 且该接口指示安全感知解析器不要对此查询执行验证
- 本地策略已禁用对此查询的验证
安全感知解析器对签名验证的支持 MUST 包括对通配符所有者名称验证的支持.
安全感知解析器 MAY 查询缺失的安全 RR, 以尝试执行验证. 当尝试检索位于区域切分父侧的缺失 NSEC RR 时, 安全感知迭代模式解析器 MUST 查询父区域的名称服务器, 而不是子区域的名称服务器.
当尝试检索缺失的 DS 时, 安全感知迭代模式解析器 MUST 查询父区域的名称服务器, 而不是子区域的名称服务器.
4.3. 确定数据的安全状态 (Determining Security Status of Data)
安全感知解析器 MUST 能够确定是否应预期某个特定 RRset 已签名. 安全感知解析器必须能够区分四种情况:
Secure: 解析器能够从可信安全锚构造一条由已签名 DNSKEY 和 DS RR 组成, 通向该 RRset 的链. 在这种情况下, 该 RRset 应已签名并接受签名验证.
Insecure: 解析器知道不存在从任何可信起点到该 RRset 的已签名 DNSKEY 和 DS RR 链. 当目标 RRset 位于未签名区域或未签名区域的后代区域中时, 可能出现这种情况. 在这种情况下, 该 RRset 可能已签名, 也可能未签名, 但解析器无法验证签名.
Bogus: 解析器认为本应能够为该 RRset 建立信任链, 但实际无法建立. 原因可能是签名因某种原因验证失败, 也可能是相关 DNSSEC RR 表明应存在的数据缺失. 这种情况可能表示攻击, 也可能表示配置错误或某种形式的数据损坏.
Indeterminate: 解析器无法确定该 RRset 是否应已签名, 因为解析器无法获得必要的 DNSSEC RR. 当安全感知解析器无法联系相关区域的安全感知名称服务器时, 可能出现这种情况.
4.4. 已配置的信任锚 (Configured Trust Anchors)
安全感知解析器 MUST 能够配置至少一个可信公钥或 DS RR, 并且 SHOULD 能够配置多个可信公钥或 DS RR.
由于没有这样的已配置信任锚时, 安全感知解析器将无法验证签名, 因此解析器 SHOULD 具有某种足够健壮的机制, 用于在启动时获取此类密钥.
4.5. 响应缓存 (Response Caching)
无论响应的安全状态如何, 安全感知解析器 SHOULD 将每个响应缓存为单个原子条目, 其中包含完整答案, 包括被命名的 RRset 以及与之关联的任何 RRSIG RR 和 NSEC RR.
安全感知解析器 MUST NOT 独立于 RRSIG RR 所签名的 RRset 来缓存 RRSIG RR, 因为这可能允许攻击者用新数据重放旧 RRSIG.
4.6. CD 和 AD 位的处理 (Handling of the CD and AD Bits)
CD 位控制安全感知解析器是否对某个特定查询执行验证. 当且仅当解析器认为响应的 Answer 和 Authority 节中的所有 RRset 都是真实可信的, 安全感知解析器 MUST 在响应中设置 AD 位.
非安全感知解析器 MUST NOT 在响应中设置 AD 位. 安全感知解析器 MUST NOT 设置 AD 位, 除非它已按照本规范中描述的规则验证数据.
4.7. 缓存 BAD 数据 (Caching BAD Data)
解析器 MAY 以不同于 "good" 安全状态数据的方式缓存 "bad" 安全状态数据. 但是, 解析器 MUST NOT 使用安全状态为 bad 的缓存数据, 除非:
- 解析器正在响应一个设置了 CD 位的查询
- 该 bad 数据是设置了 CD 位的查询的结果
- 本地策略明确授权使用 bad 数据
4.8. 合成的 CNAME (Synthesized CNAMEs)
安全感知解析器在处理 [RFC2672] 中描述的合成 CNAME RR 时, MUST 应用特殊处理规则. 解析器 MUST NOT 预期合成的 CNAME 已签名, 但 MUST 验证生成该 CNAME 所依据的 DNAME RR.
4.9. 存根解析器 (Stub Resolvers)
安全感知存根解析器是充当 DNS 解析器并具备执行签名验证能力的实体, 但它不充当完整的安全感知递归名称服务器. 存根解析器通常依赖递归名称服务器代表它们执行大多数 DNS 操作.
4.9.1. DO 位的处理 (Handling of the DO Bit)
安全感知存根解析器 SHOULD 在查询中设置 DO 位, 以表示它希望在响应中接收 DNSSEC RR.
4.9.2. CD 位的处理 (Handling of the CD Bit)
安全感知存根解析器 MAY 在查询中设置 CD 位, 以表示它愿意自行执行验证, 而不是依赖其发送查询的名称服务器代为执行验证.
4.9.3. AD 位的处理 (Handling of the AD Bit)
安全感知存根解析器 MAY 使用响应中 AD 位的设置来指示发送该响应的名称服务器是否已代表存根解析器验证数据.
在查询中设置 CD 位的安全感知存根解析器 MUST 忽略响应中的 AD 位, 因为名称服务器已被明确指示不要代表该存根解析器执行验证.