DENIC NAST - 生成兼容的 DNSSEC 密钥

DENIC NAST - 生成兼容的 DNSSEC 密钥

我在生成用于 .de 域名的兼容 DNSSEC 密钥对时遇到了一个大问题。

DENIC 有一个测试平台 - 名称服务器预授权检查 Web 界面https://www.denic.de/en/service/tools/nast/其理念是,拥有 .de 域名的客户输入其域名和(可选)名称服务器和 DNSKey,然后 NAST Web 界面检查所有内容并确认所有内容是否符合要求。到目前为止一切顺利。

问题在于 DNSKeys:我使用dnssec-keygen使用 BIND 来生成密钥,通常使用类似下面的方法不会出现任何问题:

dnssec-keygen -3 -a ECDSAP256SHA256 -n ZONE -K /var/named/dynamic test.com.

...事实上,上述操作应该生成符合 DENIC 要求的密钥:

  1. 必须设置 ZONE(确实如此)
  2. 它必须具备 NSEC3 功能(它是)
  3. 它必须是算法 3、5、6、7、8、10、12、13 或 14(它是:算法 13)
  4. 它的长度必须是 512 到 4096 位(算法 13 是,但无法使用dnssec-keygen

...

...

我现在找到了两种解决方案,这两种解决方案(通常都是这样)都需要由已生成 DNSSEC 密钥的域名注册商添加 DS 记录条目,以避免在验证检查中遗漏 DS 记录警告[1]。

...

[1] 一旦为 DENIC 的 NAST 页面生成了可验证记录,就可以使用以下方法之一生成 DS 记录密钥(首先根据预期的域名进行修改):

dnssec-dsfromkey -a SHA-1 Kexstocktra.de.+008+50707.key
dnssec-dsfromkey -a SHA-256 Kexstocktra.de.+008+50707.key
dig @127.0.0.1 dnskey exstocktra.de | dnssec-dsfromkey -f - exstocktra.de

在 name.com 控制面板中,一旦可验证的 CSK 或 KSK DNSKeys 被提交给 DENIC 的 NAST,该信息就会显示在客户控制面板中(尽管在 DS 和 RRSIG 列中,这是在注册商端输入 DS 记录后可以预料到的)。

不幸的是,将 DS 记录条目输入 name.com 的控制面板(客户通常会这样做)只会生成一个错误:成功消息,并且条目不会被接受(name.com 的设置通常会在显示已输入的详细信息和成功消息的同时生成 DS 记录条目错误,因此不能依赖错误消息本身的存在)。我试图让 name.com 修复此问题,但他们的开发团队似乎又遇到了臭名昭著的“代码冻结”,因此这方面的进展很慢。

...

无论如何,这是一个非常粗略的大纲,基于 Fedora 29(RHEL)使用 BIND DNS(BIND 9.11.4-P2-RedHat-9.11.4-13.P2.fc29(扩展支持版本):

/etc/bind/named.conf:

dnssec-enable yes;
dnssec-validation yes;
managed-keys-directory "/var/named/dynamic";

zone "exstocktra.de." IN {
    type master;
    file "named.exstocktra.de";
    auto-dnssec maintain;
    // enable the automatic signing
    key-directory "/var/named/dynamic";
    // directory in which to search for the DNSSEC keys
    update-policy local;
    // update-policy local
    inline-signing yes;
    // this is an optional addition, but is required in order
    // for BIND to handle zone signing and is essential for
    // ZSK keysets that are acceptable to DENIC's NAST
    // interface.
};

cd /var/named/动态

创建区域签名密钥集 (ZSK) [如果哈格德或者rng 工具(感谢@Håkan Lindqvist)已安装在系统上。

dnssec-keygen -3 -a ECDSAP256SHA256 -n ZONE -K /var/named/dynamic exstocktra.de.

========================================================================

如果您只需要一个 ZSK 密钥集来用于 .de 域名,那么现在就可以重新启动 named、rndc 重新加载、再次重新启动 named,并使用下面详细的步骤生成 DENIC 的 NAST 接口和注册商的 DS 记录的信息。

注意:这将产生缺少 SEP 标志的警告。dnssec-keygen不支持 SEP 标志(仅限 KSK),因此为了避免安全端点警告,必须生成和使用 KSK 密钥集,而不是 ZSK。

=========================================================================

...然后创建一个密钥签名密钥(KSK):

dnssec-keygen -f KSK -3 -a ECDSAP256SHA256 -n ZONE -K /var/named/dynamic exstocktra.de.

该目录现在将有 4 个密钥:2 个私钥/公钥对,分别由 ZSK 和 KSK 组成。

以下命令可用于将 $INCLUDE 添加到区域文件的密钥文件区域,并验证该添加是否有效:

cd /var/named/动态

for key in `ls Kexstocktra.de*.key`
do
echo "\$INCLUDE $key">> ../named.exstocktra.de
done

named-checkzone exstocktra.de "/var/named/named.exstocktra.de"

区域文件中的条目可能需要修改为类似以下内容:

$INCLUDE /var/named/dynamic/Kexstocktra.de.+013+08201.key
$INCLUDE /var/named/dynamic/Kexstocktra.de.+013+61007.key

接下来重新启动 named 以使更改生效:

systemctl restart named
rndc reload
systemctl restart named

在同一服务器上使用 dig 检查 DNSKEY 记录:

dig DNSKEY exstocktra.de. @localhost +multiline

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-13.P2.fc29 <<>> DNSKEY exstocktra.de. @localhost +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25049
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: f71e1737abd9de6a66c748e65c5f2de2fa584d957700a92d (good)
;; QUESTION SECTION:
;exstocktra.de.         IN DNSKEY

;; ANSWER SECTION:
exstocktra.de.          86400 IN DNSKEY 257 3 13 (
                                cQ9PiHhVl5FGmf95rGc2Y5pqNiSD49nhARzLiSLzCH6h
                                bquxne/8FKBtiydWLwNI2uft3c19m4F4sBCs3h/2vw==
                                ) ; KSK; alg = ECDSAP256SHA256 ; key id = 8201
exstocktra.de.          86400 IN DNSKEY 256 3 13 (
                                OpSJYBpdPcroNXNIH8n3/DrRDmTuL6QfpLcaKqrGzjQ5
                                0JgIVyO0RsnuN2uWNMPyclfe0dkobesMFCAqp1Ki7Q==
                                ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 61007

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Feb 09 19:45:38 GMT 2019
;; MSG SIZE  rcvd: 230

还要检查是否存在 RRSIG 记录:

dig A exstocktra.de. @localhost +noadditional +dnssec +multiline

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-13.P2.fc29 <<>> DNSKEY exstocktra.de. @localhost +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13699
;; flags: qr aa rd; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: e06c70f5cf57425d4cad03b95c5f2e4734fd5a649042689d (good)
;; QUESTION SECTION:
;exstocktra.de.         IN DNSKEY

;; ANSWER SECTION:
exstocktra.de.          86400 IN DNSKEY 257 3 13 (
                                cQ9PiHhVl5FGmf95rGc2Y5pqNiSD49nhARzLiSLzCH6h
                                bquxne/8FKBtiydWLwNI2uft3c19m4F4sBCs3h/2vw==
                                ) ; KSK; alg = ECDSAP256SHA256 ; key id = 8201
exstocktra.de.          86400 IN DNSKEY 256 3 13 (
                                OpSJYBpdPcroNXNIH8n3/DrRDmTuL6QfpLcaKqrGzjQ5
                                0JgIVyO0RsnuN2uWNMPyclfe0dkobesMFCAqp1Ki7Q==
                                ) ; ZSK; alg = ECDSAP256SHA256 ; key id = 61007

;; Query time: 0 msec
;; SERVER: ::1#53(::1)
;; WHEN: Sat Feb 09 19:47:19 GMT 2019
;; MSG SIZE  rcvd: 230

现在应该可以从两个代码块中的第一个代码块中复制密钥(如上所示),并在 DENIC 的 NAST 页面(下面给出链接)上使用它来创建验证 DNSSEC 记录,记住先选择 CSK/KSK 单选按钮和正确的算法。

https://www.denic.de/en/service/tools/nast/

相关内容