2009-11-30 16:00:48 -05:00
|
|
|
#!/bin/sh
|
2021-06-03 02:37:05 -04:00
|
|
|
|
2018-02-22 18:10:37 -05:00
|
|
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
2012-06-28 21:39:47 -04:00
|
|
|
#
|
2009-11-30 16:00:48 -05:00
|
|
|
# SPDX-License-Identifier: MPL-2.0
|
2021-06-03 02:37:05 -04:00
|
|
|
#
|
2009-11-30 16:00:48 -05:00
|
|
|
# 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 https://mozilla.org/MPL/2.0/.
|
2018-02-23 03:53:12 -05:00
|
|
|
#
|
2009-11-30 16:00:48 -05:00
|
|
|
# See the COPYRIGHT file distributed with this work for additional
|
2016-10-19 11:18:42 -04:00
|
|
|
# information regarding copyright ownership.
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2023-06-07 09:35:57 -04:00
|
|
|
set -e
|
|
|
|
|
|
2020-07-21 06:12:59 -04:00
|
|
|
. ../conf.sh
|
2009-11-30 16:00:48 -05:00
|
|
|
|
|
|
|
|
pzone=parent.nil pfile=parent.db
|
|
|
|
|
czone=child.parent.nil cfile=child.db
|
|
|
|
|
status=0
|
2017-08-15 04:02:24 -04:00
|
|
|
n=1
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "setting key timers"
|
2022-07-07 22:43:34 -04:00
|
|
|
$SETTIME -A now+15s $(cat rolling.key) >/dev/null
|
2009-12-02 00:42:15 -05:00
|
|
|
|
2019-06-28 07:11:26 -04:00
|
|
|
inact=$(keyfile_to_key_id "$(cat inact.key)")
|
|
|
|
|
ksk=$(keyfile_to_key_id "$(cat ksk.key)")
|
|
|
|
|
pending=$(keyfile_to_key_id "$(cat pending.key)")
|
|
|
|
|
postrev=$(keyfile_to_key_id "$(cat postrev.key)")
|
|
|
|
|
prerev=$(keyfile_to_key_id "$(cat prerev.key)")
|
|
|
|
|
rolling=$(keyfile_to_key_id "$(cat rolling.key)")
|
|
|
|
|
standby=$(keyfile_to_key_id "$(cat standby.key)")
|
|
|
|
|
zsk=$(keyfile_to_key_id "$(cat zsk.key)")
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "signing zones"
|
2019-07-20 18:06:16 -04:00
|
|
|
$SIGNER -Sg -o $czone $cfile >/dev/null
|
|
|
|
|
$SIGNER -Sg -o $pzone $pfile >/dev/null
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2009-12-02 12:54:45 -05:00
|
|
|
awk '$2 ~ /RRSIG/ {
|
2009-11-30 16:00:48 -05:00
|
|
|
type = $3;
|
|
|
|
|
getline;
|
2011-03-05 14:39:07 -05:00
|
|
|
id = $3;
|
|
|
|
|
if ($4 ~ /'${czone}'/) {
|
2009-12-02 12:54:45 -05:00
|
|
|
print type, id
|
|
|
|
|
}
|
2009-11-30 16:00:48 -05:00
|
|
|
}' <${cfile}.signed >sigs
|
|
|
|
|
|
|
|
|
|
awk '$2 ~ /DNSKEY/ {
|
2009-12-02 12:54:45 -05:00
|
|
|
flags = $3;
|
|
|
|
|
while ($0 !~ /key id =/)
|
|
|
|
|
getline;
|
2011-03-05 14:39:07 -05:00
|
|
|
id = $NF;
|
2009-12-02 12:54:45 -05:00
|
|
|
print flags, id;
|
2009-11-30 16:00:48 -05:00
|
|
|
}' <${cfile}.signed >keys
|
2009-12-02 12:54:45 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that KSK signed DNSKEY only ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep "DNSKEY $ksk"'$' sigs >/dev/null || ret=1
|
|
|
|
|
grep "SOA $ksk"'$' sigs >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that ZSK signed ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep "SOA $zsk"'$' sigs >/dev/null || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that standby ZSK did not sign ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep " $standby"'$' sigs >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that inactive key did not sign ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep " $inact"'$' sigs >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that pending key was not published ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep " $pending"'$' keys >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that standby KSK did not sign but is delegated ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep " $rolling"'$' sigs >/dev/null && ret=1
|
|
|
|
|
grep " $rolling"'$' keys >/dev/null || ret=1
|
2022-09-16 06:13:52 -04:00
|
|
|
grep -E "DS[ ]*$rolling[ ]" ${pfile}.signed >/dev/null || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that key was revoked ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep " $prerev"'$' keys >/dev/null && ret=1
|
|
|
|
|
grep " $postrev"'$' keys >/dev/null || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that revoked key self-signed ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep "DNSKEY $postrev"'$' sigs >/dev/null || ret=1
|
|
|
|
|
grep "SOA $postrev"'$' sigs >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "waiting 20 seconds for key changes to occur"
|
2009-11-30 16:00:48 -05:00
|
|
|
sleep 20
|
|
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "re-signing zone"
|
2019-07-20 18:06:16 -04:00
|
|
|
$SIGNER -Sg -o $czone -f ${cfile}.new ${cfile}.signed >/dev/null
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking that standby KSK is now active ($n)"
|
2009-11-30 16:00:48 -05:00
|
|
|
ret=0
|
|
|
|
|
grep "DNSKEY $rolling"'$' sigs >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2009-11-30 16:00:48 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking update of an old-style key ($n)"
|
2011-03-21 11:56:35 -04:00
|
|
|
ret=0
|
|
|
|
|
# printing metadata should not work with an old-style key
|
2022-07-07 22:43:34 -04:00
|
|
|
$SETTIME -pall $(cat oldstyle.key) >/dev/null 2>&1 && ret=1
|
|
|
|
|
$SETTIME -f $(cat oldstyle.key) >/dev/null 2>&1 || ret=1
|
2011-03-21 11:56:35 -04:00
|
|
|
# but now it should
|
2022-07-07 22:43:34 -04:00
|
|
|
$SETTIME -pall $(cat oldstyle.key) >/dev/null 2>&1 || ret=1
|
|
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2011-03-21 11:56:35 -04:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking warning about permissions change on key with dnssec-settime ($n)"
|
2023-07-17 12:33:50 -04:00
|
|
|
ret=0
|
|
|
|
|
# settime should print a warning about changing the permissions
|
|
|
|
|
chmod 644 $(cat oldstyle.key).private
|
|
|
|
|
$SETTIME -P none $(cat oldstyle.key) >settime1.test$n 2>&1 || ret=1
|
|
|
|
|
grep "warning: Permissions on the file.*have changed" settime1.test$n >/dev/null 2>&1 || ret=1
|
|
|
|
|
$SETTIME -P none $(cat oldstyle.key) >settime2.test$n 2>&1 || ret=1
|
|
|
|
|
grep "warning: Permissions on the file.*have changed" settime2.test$n >/dev/null 2>&1 && ret=1
|
|
|
|
|
n=$((n + 1))
|
|
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
|
|
|
|
status=$((status + ret))
|
2012-07-05 17:07:31 -04:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking warning about delete date < inactive date with dnssec-settime ($n)"
|
2013-01-17 11:59:16 -05:00
|
|
|
ret=0
|
|
|
|
|
# settime should print a warning about delete < inactive
|
2022-07-07 22:43:34 -04:00
|
|
|
$SETTIME -I now+15s -D now $(cat oldstyle.key) >tmp.out 2>&1 || ret=1
|
2013-01-17 11:59:16 -05:00
|
|
|
grep "warning" tmp.out >/dev/null 2>&1 || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2013-01-17 11:59:16 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking no warning about delete date < inactive date with dnssec-settime when delete date is unset ($n)"
|
2017-08-18 05:17:43 -04:00
|
|
|
ret=0
|
2022-07-07 22:43:34 -04:00
|
|
|
$SETTIME -D none $(cat oldstyle.key) >tmp.out 2>&1 || ret=1
|
|
|
|
|
$SETTIME -p all $(cat oldstyle.key) >tmp.out 2>&1 || ret=1
|
2017-08-18 05:17:43 -04:00
|
|
|
grep "warning" tmp.out >/dev/null 2>&1 && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2017-08-18 05:17:43 -04:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking warning about delete date < inactive date with dnssec-keygen ($n)"
|
2013-01-17 11:59:16 -05:00
|
|
|
ret=0
|
|
|
|
|
# keygen should print a warning about delete < inactive
|
2022-07-07 22:43:34 -04:00
|
|
|
$KEYGEN -q -a ${DEFAULT_ALGORITHM} -I now+15s -D now $czone >tmp.out 2>&1 || ret=1
|
2013-01-17 11:59:16 -05:00
|
|
|
grep "warning" tmp.out >/dev/null 2>&1 || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2013-01-17 11:59:16 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking correct behavior setting activation without publication date ($n)"
|
2014-02-06 18:59:14 -05:00
|
|
|
ret=0
|
2022-07-07 22:43:34 -04:00
|
|
|
key=$($KEYGEN -q -a ${DEFAULT_ALGORITHM} -A +1w $czone)
|
|
|
|
|
pub=$($SETTIME -upP $key | awk '{print $2}')
|
|
|
|
|
act=$($SETTIME -upA $key | awk '{print $2}')
|
2014-02-06 18:59:14 -05:00
|
|
|
[ $pub -eq $act ] || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
key=$($KEYGEN -q -a ${DEFAULT_ALGORITHM} -A +1w -i 1d $czone)
|
|
|
|
|
pub=$($SETTIME -upP $key | awk '{print $2}')
|
|
|
|
|
act=$($SETTIME -upA $key | awk '{print $2}')
|
2014-02-06 18:59:14 -05:00
|
|
|
[ $pub -lt $act ] || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
key=$($KEYGEN -q -a ${DEFAULT_ALGORITHM} -A +1w -P never $czone)
|
|
|
|
|
pub=$($SETTIME -upP $key | awk '{print $2}')
|
2014-02-06 18:59:14 -05:00
|
|
|
[ $pub = "UNSET" ] || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2014-02-06 18:59:14 -05:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "checking calculation of dates for a successor key ($n)"
|
2017-08-21 03:55:27 -04:00
|
|
|
ret=0
|
2022-07-07 22:43:34 -04:00
|
|
|
oldkey=$($KEYGEN -a ${DEFAULT_ALGORITHM} -q $czone)
|
|
|
|
|
newkey=$($KEYGEN -a ${DEFAULT_ALGORITHM} -q $czone)
|
2017-08-21 03:55:27 -04:00
|
|
|
$SETTIME -A -2d -I +2d $oldkey >settime1.test$n 2>&1 || ret=1
|
|
|
|
|
$SETTIME -i 1d -S $oldkey $newkey >settime2.test$n 2>&1 || ret=1
|
|
|
|
|
$SETTIME -pA $newkey | grep "1970" >/dev/null && ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2018-02-20 18:43:27 -05:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2017-08-21 03:55:27 -04:00
|
|
|
|
2022-07-07 22:43:34 -04:00
|
|
|
key=$($KEYGEN -q -a ${DEFAULT_ALGORITHM} $czone)
|
2019-04-29 08:56:05 -04:00
|
|
|
|
|
|
|
|
echo_i "checking -p output time is accepted ($n)"
|
2022-07-07 22:43:34 -04:00
|
|
|
t=$($SETTIME -pA $key | sed 's/.*: //')
|
2022-05-17 08:13:57 -04:00
|
|
|
$SETTIME -Psync "$t" $key >settime2.test$n 2>&1 || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2019-04-29 08:56:05 -04:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2019-04-29 08:56:05 -04:00
|
|
|
|
|
|
|
|
echo_i "checking -up output time is accepted ($n)"
|
2022-07-07 22:43:34 -04:00
|
|
|
t=$($SETTIME -upA $key | sed 's/.*: //')
|
2022-05-17 08:13:57 -04:00
|
|
|
$SETTIME -Dsync "$t" $key >settime2.test$n 2>&1 || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2022-05-17 08:13:57 -04:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2022-05-17 08:13:57 -04:00
|
|
|
|
|
|
|
|
echo_i "checking -p unset time is accepted ($n)"
|
|
|
|
|
# The Delete timing metadata is unset.
|
2022-07-07 22:43:34 -04:00
|
|
|
t=$($SETTIME -pD $key | sed 's/.*: //')
|
2022-05-17 08:13:57 -04:00
|
|
|
$SETTIME -Psync "$t" $key >settime2.test$n 2>&1 || ret=1
|
2022-07-07 22:43:34 -04:00
|
|
|
n=$((n + 1))
|
2019-04-29 08:56:05 -04:00
|
|
|
if [ $ret != 0 ]; then echo_i "failed"; fi
|
2022-07-07 22:43:34 -04:00
|
|
|
status=$((status + ret))
|
2019-04-29 08:56:05 -04:00
|
|
|
|
2018-02-20 18:43:27 -05:00
|
|
|
echo_i "exit status: $status"
|
2016-06-13 23:48:39 -04:00
|
|
|
[ $status -eq 0 ] || exit 1
|