DNSKEY 是什么
DNSKEY(TYPE 48)是 DNSSEC 的区域公钥记录,同一区域内通常承担两种角色:KSK(密钥签名密钥,flags 为 257)用来签 DNSKEY 集合本身,其摘要作为 DS 记录提交给父区;ZSK(区域签名密钥,flags 为 256)用来签普通记录集。两者配合,构成「父区信任子区、子区自证记录」的验证链条(RFC 4034 §2)。
基本信息
| 类型 | DNSKEY(TYPE 48) |
|---|---|
| 字段 | flags、protocol(固定为 3)、algorithm、公钥 |
| flags 取值 | 256 表示 ZSK,257 表示 KSK |
| 常见算法 | 13 为 ECDSAP256SHA256、8 为 RSASHA256、15 为 ED25519 |
| 规范 | RFC 4034 §2 |
| 配套 | 父区 DS 记录由 KSK 的公钥摘要生成 |
典型使用场景
- 启用 DNSSEC 后核对区域密钥与注册商侧的 DS 是否匹配
- 密钥轮换流程:预发布、双签、切换、撤销四步不能跳
- 排障:验证失败时确认链上密钥版本与摘要是否一致
- 托管选型:判断服务商是否支持自动轮换与自动重签
- 安全加固:淘汰弱算法与过短的密钥长度
- 审计:确认区域密钥数量与角色划分是否合理
查看密钥与生成 DS
查看密钥与生成 DS
# 查看区域公钥(flags 用来区分 KSK 与 ZSK)
dig +short example.com DNSKEY
# 257 3 13 <KSK 公钥 base64> ← 257 = KSK,用于签 DNSKEY 集合
# 256 3 13 <ZSK 公钥 base64> ← 256 = ZSK,用于签普通记录集
# 由 KSK 生成 DS(提交给注册商),以 BIND 附带工具为例
dnssec-dsfromkey -2 Kexample.com.+013+2371.key两个密钥的分工
| 密钥 | flags | 用途 |
|---|---|---|
| KSK | 257 | 签 DNSKEY 集合,其摘要作为 DS 提交父区 |
| ZSK | 256 | 签普通记录集,可以更频繁地轮换 |
| 算法编号 | 13 或 8 或 15 等 | 新旧算法切换需要双签过渡 |
| DS | 父区记录 | 由 KSK 摘要生成,必须与注册商配置一致 |
密钥轮换有固定顺序(预发布、双签、切换、撤销),顺序错误会造成瞬时验证失败;小站交给支持自动轮换的托管 DNS 更省事。
只在本地完成签名却没有在注册商提交 DS,等于「孤岛签名」——所有验证解析器都会判为不安全,常见表现是解析返回 SERVFAIL。
RSA 密钥长度不足(如 1024 位)或仍使用 RSASHA1 这类弱算法,会被部分解析器直接拒绝验证。
验证失败时,先在权威侧用 dig +dnssec 直查 DNSKEY,再与注册商侧的 DS 摘要对比,能最快判断问题出在子区、父区还是缓存解析器上。