Episode 3
密钥签名密钥是谁?
密钥签名密钥(key-signing key)闪亮登场,专门保证 DNSKEY 值得信任。
它验证 DNSKEY 记录的套路,跟区签名密钥保护 RRset 一模一样。
先来盘点一下家底:
记录捆成 RRset,由区签名密钥签名;这把密钥的公钥,存在 DNSKEY 记录里。
现在,这条 DNSKEY 记录再由密钥签名密钥签名,额外产出一条 RRSIG 记录。
密钥签名密钥的公钥,则存在另一条 DNSKEY 记录里。
两条 DNSKEY 记录捆成一个 RRset,由密钥签名密钥的私钥签名。
于是乎,解析器来要 DNSKEY 时,会收到一个装着 DNSKEY 记录的 RRset,外加一条 RRSIG。
流程升级成这样……
解析器向权威域名服务器请求 www.dnsimple.com 的 A 记录。
麻烦给我 www.dnsimple.com 的 A 记录?
权威服务器返回装着 A 记录的 RRset,外加区签名密钥签名的 RRSIG。
解析器回头再向权威服务器索要 DNSKEY,好验证 RRSIG 里的签名。
DNSKEY,麻烦也来一份?
权威服务器返回一个 RRset,里面装着区签名密钥和密钥签名密钥两把公钥的 DNSKEY,外加一条 RRSIG。
至此,解析器集齐了验证这次 DNS 查询的全部拼图。
它先用区签名密钥的 DNSKEY,验证 RRset 里 A 记录的 RRSIG。
验证通过?那就再用密钥签名密钥的 DNSKEY,验证 DNSKEY RRset 的 RRSIG。
全套流程走完,解析器就可以放心大胆地信任权威服务器返回的这些 A 记录了。
听上去很美好对吧?但新的问题又冒出来了。
我们确认了 www.dnsimple.com 的 A 记录可信,那它的父级和子级怎么办?
密钥签名密钥是自己给自己签名的。万一它自己反水了呢?