]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add tests for mkeys with unsupported algorithm
authorMatthijs Mekking <matthijs@isc.org>
Wed, 19 Dec 2018 17:45:43 +0000 (18:45 +0100)
committerEvan Hunt <each@isc.org>
Thu, 21 Feb 2019 03:45:10 +0000 (19:45 -0800)
These tests check if a key with an unsupported algorithm in
managed-keys is ignored and when seeing an algorithm rollover to
an unsupported algorithm, the new key will be ignored too.

(cherry picked from commit 144cb53d0ae3aa5e6e3123720b603f9ab2bd1fa9)

13 files changed:
bin/tests/system/mkeys/README
bin/tests/system/mkeys/clean.sh
bin/tests/system/mkeys/ns1/root.db
bin/tests/system/mkeys/ns1/sign.sh
bin/tests/system/mkeys/ns1/unsupported.key [new file with mode: 0644]
bin/tests/system/mkeys/ns6/named.args [new file with mode: 0644]
bin/tests/system/mkeys/ns6/named.conf.in
bin/tests/system/mkeys/ns6/setup.sh [new file with mode: 0644]
bin/tests/system/mkeys/ns6/unsupported-managed.key [new file with mode: 0644]
bin/tests/system/mkeys/ns7/named.conf.in [new file with mode: 0644]
bin/tests/system/mkeys/setup.sh
bin/tests/system/mkeys/tests.sh
util/copyrights

index 8e1b407664a66a079c15fae69af70b092c20ef66..07910cbb6ea6e560dcc629fbae10e327b893c855 100644 (file)
@@ -19,3 +19,6 @@ managed-keys.jnl, causing RFC 5011 initialization to fail.
 
 ns5 is a validator which is prevented from getting a response from the
 root server, causing key refresh queries to fail.
+
+ns6 is a validator which has unsupported algorithms, one at start up,
+one because of an algorithm rollover.
index f79c2ce11488c9746afbde600ad256c3fca74d59..8c9c1d14f55c9073b5a6aca2b19e8eff740f2304 100644 (file)
@@ -16,9 +16,10 @@ rm -f */named.conf
 rm -f */named.memstats */named.run */named.run.prev
 rm -f dig.out* delv.out* rndc.out* signer.out*
 rm -f dsset-. ns1/dsset-.
+rm -f ns1/zone.key
 rm -f ns*/managed-keys.bind*
 rm -f ns*/named.lock
 rm -f ns1/named.secroots ns1/root.db.signed* ns1/root.db.tmp
 rm -f ns5/named.args
-rm -f ns6/view1.mkeys ns6/view2.mkeys
+rm -f ns7/view1.mkeys ns7/view2.mkeys
 rm -rf ns4/nope
index 6ba922af09d4794dbd148a4dd4557e112cb9ec08..0070f1394217686613ef1229103aa03dbe9d19e3 100644 (file)
@@ -8,16 +8,16 @@
 ; information regarding copyright ownership.
 
 $TTL 20
-.                      IN SOA  gson.nominum.com. a.root.servers.nil. (
-                               2000042100      ; serial
-                               600             ; refresh
-                               600             ; retry
-                               1200            ; expire
-                               2               ; minimum
-                               )
-.                      NS      a.root-servers.nil.
-a.root-servers.nil.    A       10.53.0.1
+.                      IN SOA  gson.nominum.com. a.root.servers.nil. (
+                               2000042100      ; serial
+                               600             ; refresh
+                               600             ; retry
+                               1200            ; expire
+                               2               ; minimum
+                               )
+.                      NS      a.root-servers.nil.
+a.root-servers.nil.    A       10.53.0.1
 
 ; no delegation
 
-example.               TXT     "This is a test."
+example.               TXT     "This is a test."
index 502b5becc7675319438a2bf4f86d735f446408e2..569194a19286090bb5105c1a6d992393a414baa1 100644 (file)
@@ -26,13 +26,18 @@ cp managed.conf ../ns2/managed.conf
 cp managed.conf ../ns4/managed.conf
 cp managed.conf ../ns5/managed.conf
 
-# Configure a trusted key statement (used by delv)
+# Configure a trusted key statement (used by delv).
 keyfile_to_trusted_keys $keyname > trusted.conf
 
+# Prepare an unsupported algorithm key.
+unsupportedkey=K.+003+28683
+cp unsupported.key "${unsupportedkey}.key"
+
 #
 #  Save keyname and keyid for managed key id test.
 #
 echo "$keyname" > managed.key
+echo "$zskkeyname" > zone.key
 keyid=`expr $keyname : 'K\.+00.+\([0-9]*\)'`
 keyid=`expr $keyid + 0`
 echo "$keyid" > managed.key.id
diff --git a/bin/tests/system/mkeys/ns1/unsupported.key b/bin/tests/system/mkeys/ns1/unsupported.key
new file mode 100644 (file)
index 0000000..7435d03
--- /dev/null
@@ -0,0 +1 @@
+.      IN      DNSKEY  257 3 255 BJiXuidPHuGIne8GlCBLG+Oq/FZruQd2s3uBo+SxY16NUP/Vwl8MctMK62KsblDU1gIJAdEMVep2tsOkuSm0bIbJ8NBex+N9rSvzH2YJlDCT9QnNfv4q5RRTcVA3lk9nkmWHo6zcAT33yuS+THOCSznOMCJRq8JGZ6xqMJLv9FucuK6CCe6QBAZ5e98dpyGTWQLu7AERKKFqda9YCk3KQfdzx/HZ4SpQpRLncIXvGm1PIMT8Ar95NB/BsFJGwr5ZTaQtRYOXf2DD7wD3pfMsTJCdZyC0J0EtGBG109I+Oou1cswUfqZLXip/aV3eaBAUqLcZpg8P8vAbrvEq4uMS4OMZeXL6nu0irrdS1Pqmax8RsC+x3fg9EBH3QmHroJZtiU5h+0x4qApp7HE4Z5zFRuxIp9iB
diff --git a/bin/tests/system/mkeys/ns6/named.args b/bin/tests/system/mkeys/ns6/named.args
new file mode 100644 (file)
index 0000000..02f8f67
--- /dev/null
@@ -0,0 +1 @@
+-m record,size,mctx -T clienttest -c named.conf -d 99 -X named.lock -g -T mkeytimers=5/10/20
index 37ddaa16ec430476ac413184c3b3f3fca4065e41..8d76f7f2e76c492635fe093579bea1a21b0d92e2 100644 (file)
@@ -22,8 +22,8 @@ options {
        recursion yes;
        notify no;
        dnssec-enable yes;
-       dnssec-validation auto;
-       bindkeys-file "managed.conf";
+       dnssec-validation yes;
+       trust-anchor-telemetry no;
 };
 
 key rndc_key {
@@ -35,16 +35,9 @@ controls {
        inet 10.53.0.6 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
 };
 
-view view1 {
-       zone "." {
-               type hint;
-               file "../../common/root.hint";
-       };
+zone "." {
+       type hint;
+       file "../../common/root.hint";
 };
 
-view view2 {
-       zone "." {
-               type hint;
-               file "../../common/root.hint";
-       };
-};
+include "managed.conf";
diff --git a/bin/tests/system/mkeys/ns6/setup.sh b/bin/tests/system/mkeys/ns6/setup.sh
new file mode 100644 (file)
index 0000000..5ba1647
--- /dev/null
@@ -0,0 +1,30 @@
+#!/bin/sh -e
+#
+# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# See the COPYRIGHT file distributed with this work for additional
+# information regarding copyright ownership.
+
+SYSTEMTESTTOP=../..
+. $SYSTEMTESTTOP/conf.sh
+
+zone=.
+zonefile=root.db
+
+# an RSA key
+rsakey=`$KEYGEN -a rsasha256 -qfk rsasha256.`
+
+# a key with unsupported algorithm
+unsupportedkey=Kunknown.+255+00000
+cp unsupported-managed.key "${unsupportedkey}.key"
+
+# root key
+rootkey=`cat ../ns1/managed.key`
+cp "../ns1/${rootkey}.key" .
+
+# Configure the resolving server with a managed trusted key.
+keyfile_to_managed_keys $unsupportedkey $rsakey $rootkey > managed.conf
diff --git a/bin/tests/system/mkeys/ns6/unsupported-managed.key b/bin/tests/system/mkeys/ns6/unsupported-managed.key
new file mode 100644 (file)
index 0000000..be872a0
--- /dev/null
@@ -0,0 +1 @@
+unsupported.   IN      DNSKEY  257 3 255 BOOVAhiJDPqhfU7+yGXjhetrtC/rtjmwO1yo52BUHUd8R4hQ/ZPdYCVvQlvNkRxDblPkFM5YRXkesS30pJSoNYrg+djbMNumJrLG+lbhFIc/ahTjlYOxb1zm2z00ubHju/1uGBifiRvKWSK0Vr0u6NtS4PKZfsnXt+piSHiRAHSfkjGHwqPYYKh9EUW12kJmIzlMaM6WYl+gJOvL+f8VqNLtvsMPT6OPK/3h/Dnfnxyeudp/jzAnNDDiTgX2XfzIXB4UwxtzIOGaHLnprpNf3zoBm0kyaEdSQQ/qKkpCOqjBasYEHRjVz3RncPUkdLr7PQuPBfFDr3SUMMJqufJrO4IJjtD4cCBT7K1i39Jg471nEzU1vkPzxF+Rw1QHT4nZaXbltf3BEZGS4Knoe9XPwi5KjGW6
diff --git a/bin/tests/system/mkeys/ns7/named.conf.in b/bin/tests/system/mkeys/ns7/named.conf.in
new file mode 100644 (file)
index 0000000..a9aba00
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * See the COPYRIGHT file distributed with this work for additional
+ * information regarding copyright ownership.
+ */
+
+// NS7
+
+options {
+       query-source address 10.53.0.7;
+       notify-source 10.53.0.7;
+       transfer-source 10.53.0.7;
+       port @PORT@;
+       pid-file "named.pid";
+       listen-on { 10.53.0.7; };
+       listen-on-v6 { none; };
+       recursion yes;
+       notify no;
+       dnssec-enable yes;
+       dnssec-validation auto;
+       bindkeys-file "managed.conf";
+};
+
+key rndc_key {
+       secret "1234abcd8765";
+       algorithm hmac-sha256;
+};
+
+controls {
+       inet 10.53.0.7 port @CONTROLPORT@ allow { any; } keys { rndc_key; };
+};
+
+view view1 {
+       zone "." {
+               type hint;
+               file "../../common/root.hint";
+       };
+};
+
+view view2 {
+       zone "." {
+               type hint;
+               file "../../common/root.hint";
+       };
+};
index 91a024a4a956d5b4e43d7f897272ee86a33c43ad..e3319ee47e7359378db04f85fc2351904e68c439 100644 (file)
@@ -27,6 +27,7 @@ copy_setports ns6/named.conf.in ns6/named.conf
 cp ns5/named1.args ns5/named.args
 
 ( cd ns1 && $SHELL sign.sh )
+( cd ns6 && $SHELL setup.sh )
 
 cp ns2/managed.conf ns2/managed1.conf
 
index a3d86848b9e78dcda975bb8f3d4cf5f1c97d07fe..0c7a4f0a277e147fbb1314f9785c5b91dcd55a74 100644 (file)
@@ -745,7 +745,7 @@ nextpart ns5/named.run > /dev/null
 mkeys_reconfig_on 1
 wait_for_log "Returned from key fetch in keyfetch_done() for '.': success" ns5/named.run
 mkeys_secroots_on 5
-grep '; managed' ns5/named.secroots > /dev/null 2>&1 || ret=1
+grep '; managed' ns5/named.secroots > /dev/null || ret=1
 # ns1 should not longer REFUSE queries from ns5, so managed keys should be
 # correctly refreshed and resolving should succeed
 $DIG $DIGOPTS +noauth example. @10.53.0.5 txt > dig.out.ns5.b.test$n || ret=1
@@ -756,16 +756,69 @@ if [ $ret != 0 ]; then echo_i "failed"; fi
 status=`expr $status + $ret`
 
 n=`expr $n + 1`
+echo_i "reinitialize trust anchors, add unsupported algorithm ($n)"
+ret=0
+$PERL $SYSTEMTESTTOP/stop.pl --use-rndc --port ${CONTROLPORT} mkeys ns6
+rm -f ns6/managed-keys.bind*
+nextpart ns6/named.run > /dev/null
+$PERL $SYSTEMTESTTOP/start.pl --noclean --restart --port ${PORT} mkeys ns6
+# log when an unsupported algorithm is encountered during startup
+wait_for_log "skipping managed key for 'unsupported\.': algorithm is unsupported" ns6/named.run
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo_i "skipping unsupported algorithm in managed-keys ($n)"
+ret=0
+mkeys_status_on 6 > rndc.out.$n 2>&1
+# there should still be only two keys listed (for . and rsasha256.)
+count=`grep -c "keyid: " rndc.out.$n`
+[ "$count" -eq 2 ] || ret=1
+# two lines indicating trust status
+count=`grep -c "trust" rndc.out.$n`
+[ "$count" -eq 2 ] || ret=1
+
+n=`expr $n + 1`
+echo_i "introduce unsupported algorithm rollover in authoritative zone ($n)"
+ret=0
+cp ns1/root.db ns1/root.db.orig
+ksk=`cat ns1/managed.key`
+zsk=`cat ns1/zone.key`
+cat "ns1/${ksk}.key" "ns1/${zsk}.key" ns1/unsupported.key >> ns1/root.db
+grep "\..*IN.*DNSKEY.*257 3 255" ns1/root.db > /dev/null || ret=1
+$SIGNER -K ns1 -N unixtime -o . ns1/root.db $ksk $zsk > /dev/null 2>/dev/null || ret=1
+grep "DNSKEY.*257 3 255" ns1/root.db.signed > /dev/null || ret=1
+cp ns1/root.db.orig ns1/root.db
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo_i "skipping unsupported algorithm in rollover ($n)"
+ret=0
+mkeys_reload_on 1
+mkeys_refresh_on 6
+mkeys_status_on 6 > rndc.out.$n 2>&1
+# there should still be only two keys listed (for . and rsasha256.)
+count=`grep -c "keyid: " rndc.out.$n`
+[ "$count" -eq 2 ] || ret=1
+# two lines indicating trust status
+count=`grep -c "trust" rndc.out.$n`
+[ "$count" -eq 2 ] || ret=1
+# log when an unsupported algorithm is encountered during rollover
+wait_for_log "Cannot compute tag for key in zone \.: algorithm is unsupported" ns6/named.run
+if [ $ret != 0 ]; then echo_i "failed"; fi
+status=`expr $status + $ret`
+
 echo_i "check 'rndc managed-keys' and views ($n)"
 ret=0
-$RNDCCMD 10.53.0.6 managed-keys refresh in view1 > rndc.out.ns6.view1.test$n || ret=1
-grep "refreshing managed keys for 'view1'" rndc.out.ns6.view1.test$n > /dev/null || ret=1
-lines=`wc -l < rndc.out.ns6.view1.test$n`
+$RNDCCMD 10.53.0.7 managed-keys refresh in view1 > rndc.out.ns7.view1.test$n || ret=1
+grep "refreshing managed keys for 'view1'" rndc.out.ns7.view1.test$n > /dev/null || ret=1
+lines=`wc -l < rndc.out.ns7.view1.test$n`
 [ $lines -eq 1 ] || ret=1
-$RNDCCMD 10.53.0.6 managed-keys refresh > rndc.out.ns6.view2.test$n || ret=1
-lines=`wc -l < rndc.out.ns6.view2.test$n`
-grep "refreshing managed keys for 'view1'" rndc.out.ns6.view2.test$n > /dev/null || ret=1
-grep "refreshing managed keys for 'view2'" rndc.out.ns6.view2.test$n > /dev/null || ret=1
+$RNDCCMD 10.53.0.7 managed-keys refresh > rndc.out.ns7.view2.test$n || ret=1
+lines=`wc -l < rndc.out.ns7.view2.test$n`
+grep "refreshing managed keys for 'view1'" rndc.out.ns7.view2.test$n > /dev/null || ret=1
+grep "refreshing managed keys for 'view2'" rndc.out.ns7.view2.test$n > /dev/null || ret=1
 [ $lines -eq 2 ] || ret=1
 if [ $ret != 0 ]; then echo_i "failed"; fi
 status=`expr $status + $ret`
index 3c29be99b0a7da7f37089fb9c377f5463fd3df23..3c61e74800f1216638bffee98f59967aad5d9672 100644 (file)
 ./bin/tests/system/mkeys/ns1/named3.conf.in    CONF-C  2017,2018,2019
 ./bin/tests/system/mkeys/ns1/root.db           ZONE    2015,2016,2017,2018,2019
 ./bin/tests/system/mkeys/ns1/sign.sh           SH      2015,2016,2017,2018,2019
+./bin/tests/system/mkeys/ns1/unsupported.key   X       2018,2019
 ./bin/tests/system/mkeys/ns2/named.args                X       2015,2016,2017,2018,2019
 ./bin/tests/system/mkeys/ns2/named.conf.in     CONF-C  2015,2016,2018,2019
 ./bin/tests/system/mkeys/ns3/named.args                X       2015,2016,2017,2018,2019
 ./bin/tests/system/mkeys/ns5/named.conf.in     CONF-C  2017,2018,2019
 ./bin/tests/system/mkeys/ns5/named1.args       X       2017,2018,2019
 ./bin/tests/system/mkeys/ns5/named2.args       X       2017,2018,2019
-./bin/tests/system/mkeys/ns6/named.conf.in     CONF-C  2019
+./bin/tests/system/mkeys/ns6/named.args                X       2018,2019
+./bin/tests/system/mkeys/ns6/named.conf.in     CONF-C  2018,2019
+./bin/tests/system/mkeys/ns6/setup.sh          SH      2018,2019
+./bin/tests/system/mkeys/ns6/unsupported-managed.key   X       2018,2019
+./bin/tests/system/mkeys/ns7/named.conf.in     CONF-C  2019
 ./bin/tests/system/mkeys/prereq.sh             SH      2015,2016,2018,2019
 ./bin/tests/system/mkeys/setup.sh              SH      2015,2016,2017,2018,2019
 ./bin/tests/system/mkeys/tests.sh              SH      2015,2016,2017,2018,2019