Skip to main content

RFC 4035 - DNSSEC协议修改 (Protocol Modifications for the DNS Security Extensions)

发布日期: 2005年3月
作者: R. Arends, R. Austein, M. Larson, D. Massey, S. Rose


摘要

本文档描述了支持DNSSEC所需的DNS协议修改.定义了签名验证过程,认证链构建,安全感知解析器行为等.


核心协议修改

1. EDNS0支持

DNSSEC要求支持EDNS0 (RFC 2671)以传输大型响应:

; DO位 (DNSSEC OK) 表示请求DNSSEC记录
dig +dnssec example.com

2. 验证过程

步骤:

1. 获取信任锚 (通常是根DNSKEY)
2. 构建认证链: 根 → TLD → 域名
3. 验证每一跳的RRSIG
4. 检查签名有效期
5. 返回验证状态: Secure/Insecure/Bogus

3. 安全状态

状态含义处理
Secure签名有效信任数据
Insecure未签名接受数据 (降级)
Bogus签名无效拒绝数据 (SERVFAIL)

4. CD和AD位

CD位 (Checking Disabled): 客户端请求禁用验证
AD位 (Authentic Data): 服务器表示数据已验证


验证算法

def verify_rrsig(rrset, rrsig, dnskey):
# 1. 检查签名有效期
if not (rrsig.inception <= now <= rrsig.expiration):
return False

# 2. 规范化RRset
canonical_rrset = canonicalize(rrset)

# 3. 计算签名
expected_sig = sign(canonical_rrset, dnskey.public_key)

# 4. 比较签名
return expected_sig == rrsig.signature

解析器行为

安全感知解析器必须:

✅ 验证所有DNSSEC签名
✅ 构建完整认证链
✅ 检查信任锚
✅ 正确处理验证失败
✅ 设置AD位


DNSSEC三部曲至此完整:

  • RFC 4033 - 介绍和需求
  • RFC 4034 - 资源记录格式
  • RFC 4035 - 协议修改 (本文档)

相关RFC:

  • RFC 5155 - NSEC3
  • RFC 6840 - DNSSEC实施澄清
  • RFC 8624 - 算法建议