mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-22 10:10:06 +00:00
101 lines
3.6 KiB
Bash
101 lines
3.6 KiB
Bash
|
#!/bin/sh -e
|
||
|
|
||
|
# Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||
|
#
|
||
|
# SPDX-License-Identifier: MPL-2.0
|
||
|
#
|
||
|
# 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/.
|
||
|
#
|
||
|
# See the COPYRIGHT file distributed with this work for additional
|
||
|
# information regarding copyright ownership.
|
||
|
|
||
|
# shellcheck source=conf.sh
|
||
|
. ../conf.sh
|
||
|
|
||
|
cd "ns3"
|
||
|
|
||
|
setup() {
|
||
|
zone="$1"
|
||
|
echo_i "setting up zone: $zone"
|
||
|
zonefile="${zone}.db"
|
||
|
infile="${zone}.db.infile"
|
||
|
echo "$zone" >>zones
|
||
|
}
|
||
|
|
||
|
# Set in the key state files the Predecessor/Successor fields.
|
||
|
# Key $1 is the predecessor of key $2.
|
||
|
key_successor() {
|
||
|
id1=$(keyfile_to_key_id "$1")
|
||
|
id2=$(keyfile_to_key_id "$2")
|
||
|
echo "Predecessor: ${id1}" >>"${2}.state"
|
||
|
echo "Successor: ${id2}" >>"${1}.state"
|
||
|
}
|
||
|
|
||
|
# Make lines shorter by storing key states in environment variables.
|
||
|
H="HIDDEN"
|
||
|
R="RUMOURED"
|
||
|
O="OMNIPRESENT"
|
||
|
U="UNRETENTIVE"
|
||
|
|
||
|
#
|
||
|
# The zones at enable-dnssec.autosign represent the various steps of the
|
||
|
# initial signing of a zone.
|
||
|
#
|
||
|
|
||
|
# Step 1:
|
||
|
# This is an unsigned zone and named should perform the initial steps of
|
||
|
# introducing the DNSSEC records in the right order.
|
||
|
setup step1.enable-dnssec.autosign
|
||
|
cp template.db.in $zonefile
|
||
|
|
||
|
# Step 2:
|
||
|
# The DNSKEY has been published long enough to become OMNIPRESENT.
|
||
|
setup step2.enable-dnssec.autosign
|
||
|
# DNSKEY TTL: 300 seconds
|
||
|
# zone-propagation-delay: 5 minutes (300 seconds)
|
||
|
# publish-safety: 5 minutes (300 seconds)
|
||
|
# Total: 900 seconds
|
||
|
TpubN="now-900s"
|
||
|
keytimes="-P ${TpubN} -A ${TpubN}"
|
||
|
CSK=$($KEYGEN -k enable-dnssec -l kasp.conf $keytimes $zone 2>keygen.out.$zone.1)
|
||
|
$SETTIME -s -g $O -k $R $TpubN -r $R $TpubN -d $H $TpubN -z $R $TpubN "$CSK" >settime.out.$zone.1 2>&1
|
||
|
cat template.db.in "${CSK}.key" >"$infile"
|
||
|
private_type_record $zone $DEFAULT_ALGORITHM_NUMBER "$CSK" >>"$infile"
|
||
|
cp $infile $zonefile
|
||
|
$SIGNER -S -z -x -s now-1h -e now+30d -o $zone -O raw -f "${zonefile}.signed" $infile >signer.out.$zone.1 2>&1
|
||
|
|
||
|
# Step 3:
|
||
|
# The zone signatures have been published long enough to become OMNIPRESENT.
|
||
|
setup step3.enable-dnssec.autosign
|
||
|
# Passed time since publication:
|
||
|
# max-zone-ttl: 12 hours (43200 seconds)
|
||
|
# zone-propagation-delay: 5 minutes (300 seconds)
|
||
|
TpubN="now-43500s"
|
||
|
# We can submit the DS now.
|
||
|
keytimes="-P ${TpubN} -A ${TpubN}"
|
||
|
CSK=$($KEYGEN -k enable-dnssec -l kasp.conf $keytimes $zone 2>keygen.out.$zone.1)
|
||
|
$SETTIME -s -g $O -k $O $TpubN -r $O $TpubN -d $H $TpubN -z $R $TpubN "$CSK" >settime.out.$zone.1 2>&1
|
||
|
cat template.db.in "${CSK}.key" >"$infile"
|
||
|
private_type_record $zone $DEFAULT_ALGORITHM_NUMBER "$CSK" >>"$infile"
|
||
|
cp $infile $zonefile
|
||
|
$SIGNER -S -z -x -s now-1h -e now+30d -o $zone -O raw -f "${zonefile}.signed" $infile >signer.out.$zone.1 2>&1
|
||
|
|
||
|
# Step 4:
|
||
|
# The DS has been submitted long enough ago to become OMNIPRESENT.
|
||
|
setup step4.enable-dnssec.autosign
|
||
|
# DS TTL: 2 hour (7200 seconds)
|
||
|
# parent-propagation-delay: 1 hour (3600 seconds)
|
||
|
# Total aditional time: 10800 seconds
|
||
|
# 43500 + 10800 = 54300
|
||
|
TpubN="now-54300s"
|
||
|
TsbmN="now-10800s"
|
||
|
keytimes="-P ${TpubN} -A ${TpubN} -P sync ${TsbmN}"
|
||
|
CSK=$($KEYGEN -k enable-dnssec -l kasp.conf $keytimes $zone 2>keygen.out.$zone.1)
|
||
|
$SETTIME -s -g $O -P ds $TsbmN -k $O $TpubN -r $O $TpubN -d $R $TpubN -z $O $TsbmN "$CSK" >settime.out.$zone.1 2>&1
|
||
|
cat template.db.in "${CSK}.key" >"$infile"
|
||
|
private_type_record $zone $DEFAULT_ALGORITHM_NUMBER "$CSK" >>"$infile"
|
||
|
cp $infile $zonefile
|
||
|
$SIGNER -S -z -x -s now-1h -e now+30d -o $zone -O raw -f "${zonefile}.signed" $infile >signer.out.$zone.1 2>&1
|