我在将已签名的 DNS 区域迁移到新服务器时遇到了一些麻烦。我复制了区域文件(未签名、已签名和日志)、签名密钥和 DS 集。一旦到位,BIND 很乐意为该区域提供服务,但无法对其进行签名。这是我尝试运行的结果rndc sign example.com
:
29-Sep-2022 17:16:42.605 general: info: received control channel command 'sign example.com'
29-Sep-2022 17:16:42.605 general: debug 1: zone_settimer: zone example.com/IN: enter
29-Sep-2022 17:16:42.605 general: debug 1: zone_timer: zone example.com/IN: enter
29-Sep-2022 17:16:42.605 general: debug 1: zone_maintenance: zone example.com/IN: enter
29-Sep-2022 17:16:42.605 dnssec: info: zone example.com/IN: reconfiguring zone keys
29-Sep-2022 17:16:42.606 dnssec: warning: EVP_SignFinal failed (failure)
29-Sep-2022 17:16:42.606 dnssec: info: error:03000098:digital envelope routines::invalid digest:crypto/evp/pmeth_lib.c:961:
29-Sep-2022 17:16:42.606 dnssec: error: zone example.com/IN: sign_apex:add_sigs -> failure
29-Sep-2022 17:16:42.606 dnssec: debug 3: zone example.com/IN: zone_rekey failure: failure (retry in 600 seconds)
29-Sep-2022 17:16:42.606 general: debug 1: zone_settimer: zone example.com/IN: enter
配置的相关部分是:
options {
dnssec-enable yes;
dnssec-validation auto;
};
zone "example.com" IN {
type master;
file "dynamic/db.example.com.signed";
auto-dnssec allow;
update-policy {
grant "local-nsupdate" wildcard *;
grant "acme-clients" subdomain example.com. TXT;
};
also-notify { office-routers; };
};
新的配置几乎相同,只是删除了,dnssec-enable yes;
因为日志告诉我它现在已经过时了。
旧服务器运行BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 (Extended Support Version) <id:7107deb>
在 Scientific Linux 7.6 上,新服务器运行BIND 9.16.23-RH (Extended Support Version) <id:fde3b1f>
在 AlmaLinux 9.0 上。
编辑添加EVP_SignFinal
看起来是OpenSSL 函数,所以问题可能根本不在 BIND 中。旧版本说named -V
:
由 GCC 4.8.5 20150623(Red Hat 4.8.5-44)编译,
使用 OpenSSL 版本编译:OpenSSL 1.0.2k 2017 年 1 月 26 日
链接到 OpenSSL 版本:OpenSSL 1.0.2k-fips 2017 年 1 月 26 日
新版本说:
由 GCC 11.2.1 20211203(Red Hat 11.2.1-7)编译,
使用 OpenSSL 版本编译:OpenSSL 3.0.1 2021 年 12 月 14 日
链接到 OpenSSL 版本:OpenSSL 3.0.1 2021 年 12 月 14 日
答案1
我最终通过降级解决了这个问题加密政策在系统上。似乎我 2015 年生成的 NSEC3RSASHA1 区域签名密钥不再足够强大,无法与默认设置配合使用。我通过运行以下命令解决了此问题:
update-crypto-policies --set LEGACY
systemctl restart named.service
rndc sign example.com
当然,从安全角度来看,这不是一个令人满意的解决方案,所以我想我需要重新生成所有密钥,更新注册中心,并重新签署区域。