#!/bin/bash
#
# /usr/local/sbin/buildkeys
#
# Einfaches Script zum Bau einer CA mit certtool
#
# (C) 2010 invis-server.org
# Autor: Stefan Schaefer
# Fragen an: stefan@invis-server.org
# License: GPLv3
# Version 0.1
#

# Globale Variablen
cadir="/etc/ssl/CA"
templatedir="/etc/rootpack/templates/gnutls"
certdir="/etc/ssl/certs"
keydir="/etc/ssl/private"
apachecertdir="/etc/apache2/ssl.crt"
apachekeydir="/etc/apache2/ssl.key"

entropy() {
    # $1 start oder stop
    if [[ $1 == "start" ]]; then
	find / \( -name core -o -type p -o -type c -o -type s -o \( -path /dev -a -path /proc \) -prune \) -o -exec md5sum {} \; > /var/tmp/randomfile 2>&1 &
    elif [[ $1 == "stop" ]]; then
	# Genug Entropie
	kill $(ps ax |grep "find.*md5sum"| sed -e 's/^\s*//' |cut -d " " -f1) > /dev/null 2>&1
	
	# Achtung Quick and Dirty Lösung. Alle laufenden find & md5sum Prozesse werden ageschossen.
	# Es wird keine Rücksicht darauf genommen ob find oder md5sum gerade auch von anderen Usern
	# verwendet wird... 
	# Fuer Verbesserungsvorschläge bin ich offen.
	#killall find > /dev/null 2>&1
	#killall md5sum > /dev/null 2>&1
	rm -f /var/tmp/randomfile
    fi
}

case "$1" in
    "" ) echo "Geben Sie bitte an, was buildkeys machen soll. \"ca\", \"wskey\" oder \"mskey\""
	 exit
        ;;

    "ca" )
	# Fuer ausreichend Entropie sorgen
	entropy start
	
	# CA-Verzeichnis anlegen
	if [[ ! -d $cadir ]]; then
	    mkdir -p $cadir
	else
	    echo "Es ist breits eine CA vorhanden. Löschen Sie diese bitte zuerst indem Sie das Verzeichnis $cadir löschen"
	    exit
	fi
	# CA-Schlüssel bauen
	certtool --generate-privkey --outfile $cadir/ca-key.pem
	certtool --template $templatedir/cacert.cfg --generate-self-signed --load-privkey $cadir/ca-key.pem --outfile $cadir/ca-cert.pem

	# Genug Unordnung gemacht.
	entropy stop 2>&1
	;;

    "wskey" )
	read -p "Geben Sie den vollständigen Namen des Webservers (FQDN) an: " wsfqdn
	# Unordnung an ;-)
	entropy start
	certtool -p --outfile $apachekeydir/ws-$wsfqdn.pem 
	# Unordnung aus
	entropy stop 2>&1
	certtool --template $templatedir/webserver.cfg --generate-request --load-privkey $apachekeydir/ws-$wsfqdn.pem --outfile ws-$wsfqdn-req.pem
	certtool --template $templatedir/webserver.cfg --generate-certificate --load-request ws-$wsfqdn-req.pem --outfile $apachecertdir/ws-$wsfqdn-cert.pem --load-ca-certificate $cadir/ca-cert.pem --load-ca-privkey $cadir/ca-key.pem
	;;

    "mskey" )
	read -p "Geben Sie den vollständigen Namen des Mailservers (FQDN) an: " msfqdn
	# Unordnung an ;-)
	entropy start
	certtool -p --outfile $keydir/ms-$msfqdn.pem 
	# Unordnung aus
	entropy stop 2>&1
	certtool --template $templatedir/mailserver.cfg --generate-request --load-privkey $keydir/ms-$msfqdn.pem --outfile ms-$msfqdn-req.pem
	certtool --template $templatedir/mailserver.cfg --generate-certificate --load-request ms-$msfqdn-req.pem --outfile $certdir/ms-$msfqdn-cert.pem --load-ca-certificate $cadir/ca-cert.pem --load-ca-privkey $cadir/ca-key.pem
	;;
    "help" )
	echo "Text Text Text"
	;;
esac

