StartSSL Zertifikate erneuern

Neues Certificate Signing Request erstellen (mit vorhandenem privaten Schlüssel)

openssl req -new -key ~/stephangsell.de.key -out ~/stephangsell.de.csr

Dann bei StartSSL den Inhalt der CSR-Datei hochladen und auf unterzeichneten Schlüssel warten.
Schlüsselinhalt in ~/stephangsell.de.crt speichern.

Folgende 3 Befehle sind nur beim ersten Mal notwendig, um eine gültige StartSSL-Zertifikatskette zu erzeugen

wget https://www.startssl.com/certs/ca.pem
wget https://www.startssl.com/certs/sub.class1.server.ca.pem
cat sub.class1.server.ca.pem ca.pem > startssl_alles.pem

UPDATE April 2016: Mittlerweile bekommt man bei StartSSL eine ZIP-Datei mit dem eigentlichen Zertifikat als .crt-Datei sowie einer Datei namens root_bundle.crt. Diese wird als ~/startssl_root_bundle.crt gespeichert.

Anschließend

cp ~/stephangsell.de.crt /etc/ssl/certs/ && cp ~/stephangsell.de.key /etc/ssl/private/
cp ~/startssl_root_bundle.crt /etc/ssl/pem/
cat ~/stephangsell.de.key ~/stephangsell.de.crt > /etc/ssl/pem/stephangsell.de.pem
cat /etc/ssl/pem/stephangsell.de.pem /etc/ssl/pem/startssl_root_bundle.crt > /etc/ssl/pem/stephangsell.de.startssl_alles.pem
systemctl restart apache2.service ; systemctl restart postfix.service ; systemctl restart dovecot.service 

SSL-Zertifikat mit Wildcard und ohne

Für meinen Webserver wollte ich ein SSL-Zertifikat haben, bei dem sämtliche Subdomains enthalten sind (wie z.B. http://notizen.stephangsell.de), aber auch die Hauptdomain selber (http://stephangsell.de, ohne www).
Damit das beides funktioniert, muss das Feld subjAltName im Zertifikat gesetzt sein.
Den nötigen Tipp hab ich hier gefunden.

Zunächst sollte ein Private Key erzeugt werden, aus welchem später das Zertifikat erstellt werden kann:
openssl genrsa -out ~/stephangsell.de.key 2048

Um für CACert.de eine Certificate-Signing-Request (CSR) zu erstellen, muss man zunächst eine Konfigurationsdatei für OpenSSL erstellen:

[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[ v3_req ]
subjectAltName = $ENV::SUBJALTNAME
[ req_distinguished_name ]
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = Email Address
emailAddress_max = 64

Wir erstellen die Datei und speichern sie z.B. unter ~/myopenssl.cnf ab.

Der anschließend notwendige Aufruf von openssl lautet
SUBJALTNAME='DNS:*.stephangsell.de,DNS:*.example.net' openssl req \
-config ~/myopenssl.cnf \
-subj '/CN=stephangsell.de/emailAddress=admin@example.com' \
-new -extensions v3_req -key ~/stephangsell.de.key

Als Ausgabe erhält man das CSR, welches nun in das entsprechende Feld, z.B. bei CACert, kopiert wird. Daraus wird schließlich das unterzeichnete Zertifikat berechnet.


[Update]
Alternativ zu der hier beschriebenen Vorgehensweise lässt sich auch der CSRGenerator vom CACert-Wiki verwenden:
http://wiki.cacert.org/wiki/CSRGenerator