如何验证根DNS信任锚?

时间:2016-04-08 12:23:19

标签: perl dns dnssec

我正在尝试针对从here下载的信任锚(Kjqmt7v.crt)验证根密钥签名密钥(KSK)。我使用Net::DNS模块获取root KSK。

目前我很困惑如何验证两者是否相同。我尝试将.crt文件转换为Keyset对象,但这会导致错误。

这是我的代码。

#!/usr/bin/perl
use strict;
use warnings; 
use Net::DNS::Keyset;
my $keyset = Net::DNS::Keyset->new('Kjqmt7v.crt');
$keyset->print;

这是错误

 We expected a match RDATA
0��0���0   *�H��  0K10 U 
this Should not happen
 at a.pl line 5

我很困惑,因此无法提供任何正确的代码,因为我不知道如何开始。把我指向正确的方向会非常有帮助。

我想要一种方法来验证我从根DNS服务器获取的KSK的信任锚。如果还有其他方法,请更新我。

1 个答案:

答案 0 :(得分:1)

您似乎误解了IANA提供的文件中的内容。除了公共根密钥本身之外,其中没有一个实际上是DNSSEC数据。例如,Kjqmt7v.crt文件是DER格式的X.509证书(因此,Net::DNS::Keyset扼杀它就不足为奇了。如果您查看它(例如,使用openssl x509命令),您可以看到其DN字段中包含的是根KSK的DS记录的文本表示。因此,如果您验证该证书,则表示DS是正版的,您可以使用它来验证DNSKEY。

同一URL上可用的另一种替代方案,对于大多数人来说可能更容易使用,是用于XML格式的KSK的DS,具有分离的PGP签名。验证签名,使用XML文件中的数据以您喜欢的编程语言构建正确的DS记录,然后您可以使用它来验证KSK DNSKEY记录。