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