![DENIC NAST - 生成兼容的 DNSSEC 密钥](https://linux22.com/image/733150/DENIC%20NAST%20-%20%E7%94%9F%E6%88%90%E5%85%BC%E5%AE%B9%E7%9A%84%20DNSSEC%20%E5%AF%86%E9%92%A5.png)
我在生成用于 .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 要求的密钥:
- 必须设置 ZONE(确实如此)
- 它必须具备 NSEC3 功能(它是)
- 它必须是算法 3、5、6、7、8、10、12、13 或 14(它是:算法 13)
- 它的长度必须是 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 单选按钮和正确的算法。