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 - 算法建议