Skip to content
dnssec-create.sh.master 3.29 KiB
Newer Older
A. Täffner's avatar
A. Täffner committed
#!/bin/bash
source {dnssec_conffile}
domain="${1::-1}"

mysqlcheck=`mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; show tables;" | wc -c`
if [ "$mysqlcheck" = 0 ];then
 echo "$0 could not connect to database"
 exit 0
fi

if [ `cat /proc/sys/kernel/random/entropy_avail` -lt 400 ] ; then
	echo "ERROR: DNSSEC is not working as available entropy is below 400. Please consider installing package haveged. Skipping generation of keys as well as signing..."
	cp $filespre$domain $filespre$domain.signed
	mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; UPDATE dns_soa SET dnssec_info='Error during generation of keys. Please contact our support. Reason: Too less entropy available.', dnssec_initialized='N' WHERE origin='$domain.'"
	exit 20
fi

A. Täffner's avatar
A. Täffner committed
mysqlcheck=`mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; select * from dns_soa where dnssec_initialized='Y' and origin='$domain.';" | wc -c`
if [ "$mysqlcheck" -gt 1 ];then
 echo "DNSSEC: $domain seems to be initialized. If that is wrong correct dnssec_initialized in dns_soa table"
 exit 0
A. Täffner's avatar
A. Täffner committed
fi
cd $bindpath

if [ ! $domain = "" ];then
 if [ ! -f $filespre$domain ]; then
  echo "$domain zone file ($filespre$domain) does not exist"
  exit 0
 else
 if [ -f dsset-$domain. ];then
  echo "dnssec keys for $domain already exists!"
  exit 0
 else
  echo "Creating keys for $domain"
  dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE $domain
  dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE $domain
  for key in `ls K$domain*.key`; do
   echo "\$INCLUDE $bindpath/$key">> $filespre$domain
  done
  dnssec-signzone -A -3 $(head -c 1000 /dev/random | sha1sum | cut -b 1-16) -N INCREMENT -o $domain -t $filespre$domain
 fi
fi
serial=`cat $bindpath/$filespre$domain |grep "serial," |awk {' print $domain '}`
echo ""
dnssechelp=`head -1 $bindpath/dsset-$domain.`
dnssecid=`echo $dnssechelp | awk {' print $4 '}`
dnssecalg=`echo $dnssechelp | awk {' print $5 '}`
dnssecdt=`echo $dnssechelp | awk {' print $6 '}`
dnssecd=`echo $dnssechelp | awk {' print $7 '}`
echo "DS Record 1:">/tmp/.dnssec-$domain
echo "Key Tag/ID: $dnssecid">>/tmp/.dnssec-$domain
echo "Algorithm: $dnssecalg">>/tmp/.dnssec-$domain
echo "Digest/HASH Type: $dnssecdt">>/tmp/.dnssec-$domain
echo "Digest/HASH: $dnssecd">>/tmp/.dnssec-$domain

dns2sechelp=`tail -n 1 $bindpath/dsset-$domain.`
dns2secid=`echo $dns2sechelp | awk {' print $4 '}`
dns2secalg=`echo $dns2sechelp | awk {' print $5 '}`
dns2secdt=`echo $dns2sechelp | awk {' print $6 '}`
dns2secd=`echo $dns2sechelp | awk {' print $7""$8 '}`
echo "">>/tmp/.dnssec-$domain
echo "DS Record 2:">>/tmp/.dnssec-$domain
echo "Key Tag/ID: $dns2secid">>/tmp/.dnssec-$domain
echo "Algorithm: $dns2secalg">>/tmp/.dnssec-$domain
echo "Digest/HASH Type: $dns2secdt">>/tmp/.dnssec-$domain
echo "Digest/HASH: $dns2secd">>/tmp/.dnssec-$domain
	
echo "">>/tmp/.dnssec-$domain
echo "In DS-Record format:">>/tmp/.dnssec-$domain
cat $bindpath/dsset-$domain.>>/tmp/.dnssec-$domain

echo "">>/tmp/.dnssec-$domain
echo "DNSKEY-Records:">>/tmp/.dnssec-$domain
cat $bindpath/K$domain.+*.key>>/tmp/.dnssec-$domain

mysql -u $dbuser --password=$dbpass -h $dbhost -Bse "use $dbase; UPDATE dns_soa SET dnssec_info='`cat /tmp/.dnssec-$domain`', dnssec_initialized='Y' WHERE origin='$domain.'"
rm /tmp/.dnssec-$domain

else
 echo "usage: dnssec-create.sh <domain.tld>"
fi
cd $curpath