Die billigste und einfachste Methode an SSL-Zertifikate zu kommen, ist ein eigenes Zertifikat zu erstellen. Es hat nur einen Nachteil, es ist nur soweit vertrauenswürdig wie der User auch dem Aussteller vertraut.
Da es mehrere Schritte bedarf, um ein „self-signed certificate“, also ein selbstsigniertes Zertifikat, zu erstellen, lohnt sich das als Script zu erstellen. Zumal ja auch nach dem Ablauf des Zertifikates die ganze Prozedur von vorne beginnt.
Das Script nimmt die Domain des Rechners und ein Jahr als Defaultwerte an. Mit „-d“ übergibt man eine eigene Domain - es kann auch nur ein Dateiname sein, da die Domain nicht geprüft wird - und mit „-l“ die Laufzeit in Tagen. Daneben fragt openssl noch einige andere für das Zertifikat wichtige Dinge ab. Anschliessend werden die neuen Dateien nach /etc/apache2/ssl.*/ kopiert.
create_sshkey_www.sh
#!/bin/sh usage() { cat << EOF usage: $0 options This script creates a self-signed certificate for apache2. OPTIONS: -h Show this message -d domain name [default: domain of this host] -l days of lifetime [default: 365 days] EOF } export DOMAIN=`hostname --fqdn -d` DAYS=365 while getopts "h:d:l:" OPTION do case $OPTION in d) echo "domain: $OPTARG" DOMAIN=$OPTARG ;; l) DAYS=$OPTARG ;; h) usage exit 1 ;; esac done echo -e "\ncreate ssl-certificate for apache2 using domain $DOMAIN and a lifetime of $DAYS days...\n" export TMPDIR=`mktemp -d /tmp/cert.XXXXXX` openssl genrsa -out $TMPDIR/$DOMAIN.key 2048 openssl req -new -key $TMPDIR/$DOMAIN.key -out $TMPDIR/$DOMAIN.csr openssl x509 -req -days $DAYS -in $TMPDIR/$DOMAIN.csr -signkey $TMPDIR/$DOMAIN.key -out $TMPDIR/$DOMAIN.crt cp $TMPDIR/$DOMAIN.key /etc/apache2/ssl.key/ cp $TMPDIR/$DOMAIN.csr /etc/apache2/ssl.csr/ cp $TMPDIR/$DOMAIN.crt /etc/apache2/ssl.crt/ /etc/init.d/apache2 reload rm -r $TMPDIR/* rmdir $TMPDIR
Für die jeweilige Domain, kann auch ein virtueller Host (vhost) sein, werden nur drei Zeilen benötigt, um SSL zu aktivieren. Zusätzlich muss auch das SSL-Modul mod_ssl aktiviert sein. Ein apache2ctl -M | grep ssl_module sollte zeigen, ob es geladen wurde.
SSLEngine on SSLCertificateFile /etc/apache2/ssl.crt/$DOMAIN.crt SSLCertificateKeyFile /etc/apache2/ssl.key/$DOMAIN.key
Optional sind folgende Zeilen:
SSLProtocol all -SSLv2 SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
Weitere Zeilen wie SSLCACertificateFile oder SSLCertificateChainFile werden nicht benötigt bzw. sind Variablen für die Nutzung eines echten Zertifikates (z.B. ca-certs).