cryptonas/misc/makeCert.sh

93 lines
2.7 KiB
Bash
Executable File

#!/bin/sh
set -u
## http://www2.goldfisch.at/knowledge/142 beschreibt's recht gut
CA_DIR="CA/"
# enthaelt das Verzeichnis "demoCA" (siehe unten: CA-Erzeugung)
KEYSIZE=1024
CONFIG="openssl.conf"
TIME="365"
TMPREQ="/tmp/mein-apache-cert.req"
TMPRAN="/tmp/mein-apache-cert.random"
CSR_FILE=$1.csr
KEY_FILE1=$1-temp.key
KEY_FILE2=$1.key
CRT_FILE=$1.crt
if test -z "$1";
then echo "Syntax: $0 ZERTIFIKATS-DATEI [CA-Datei]"
echo " (die Dateienedungen (key, csr, crt) werden automatisch angefuegt)"
exit 1
fi
echo "Erzeuge Zufallszahlen ..."
echo "-----------------------------------------------"
# erzeugt eine große menge an zufallszahlen abhängig von keysize
dd if=/dev/urandom of=$TMPRAN bs=$KEYSIZE count=$KEYSIZE || exit 2
sleep 1
echo -e "\nErzeuge den Schluessel ..."
echo "-----------------------------------------------"
openssl genrsa -rand $TMPRAN $KEYSIZE > $KEY_FILE1 || exit 3
# z.B.: -des3 um Verschluesselung des Zertifikats zu aktivieren
# found that way in http://www.rpatrick.com/tech/makecert/
openssl rsa -in $KEY_FILE1 -out $KEY_FILE2
chmod go-rwx $KEY_FILE2
echo -e "\nErzeuge die X509-Informationen ..."
echo "-----------------------------------------------"
# wichtige parameter werden aus der config gelesen
openssl req -new -x509 -key $KEY_FILE2 -config $CONFIG > $TMPREQ || exit 4
#openssl req -new -x509 -key $KEY_FILE -config $CONFIG > $TMPREQ || exit 4
chmod go-rwx $TMPREQ
echo -e "\nFuege das Zertifikat zusammen ..."
echo "-----------------------------------------------"
cat $TMPREQ $KEY_FILE2 >$CSR_FILE || exit 5
chmod go-rwx $CSR_FILE
echo -e "\nLoesche temporaere Dateien ..."
echo "-----------------------------------------------"
rm $TMPRAN $TMPREQ $KEY_FILE1
echo -e "\nDie Signierungsanforderung $CSR_FILE wurde erzeugt!"
test -e "$CA_DIR" || exit 0
# nun wird per CA zertifiziert ...
# die CA wird erstmalig durch das Skript CA.sh mit dem Parameter "-newca" erstellt
AKT_DIR=`pwd`
echo -e "\nDiese wird nun von der CA signiert ...\n"
echo "--kopiere"
cp $CSR_FILE ${CA_DIR}newreq.pem
[ -f newcert.pem ] && rm newcert.pem
echo "--signiere"
openssl x509 -x509toreq -in ${CA_DIR}newreq.pem -days $TIME -signkey ${CA_DIR}newreq.pem -out ${CA_DIR}tmp.pem || exit 6
echo "-signiere"
openssl ca -config $CONFIG -policy policy_anything -days $TIME -out ${CA_DIR}newcert.pem -infiles ${CA_DIR}tmp.pem || exit 7
echo "foo"
[ -f tmp.pem ] && rm tmp.pem && echo "tmp.pem gloescht"
if [ ! -s newcert.pem ];
then echo "Fehler: das neue Zertifikat wurde nicht erstellt!"
exit 8
fi
rm newreq.pem
echo $AKT_DIR
mv newcert.pem ${AKT_DIR}/$CRT_FILE || echo "fehla 9" && exit 9
cd $AKT_DIR
rm $CSR_FILE
echo -e "\nFertig!"