Privater Schlüssel und CSR erstellen
Für jede Zertifikatsanforderung müssen zunächst ein privater Schlüssel und ein CSR erstellt werden. Das geht am einfachsten, in dem pro Domain zunächst eine Konfigurationsdatei mit den notwendigen Daten erstellt wird.
Als Domainname verwende ich in den Beispielen test.example.private.
Die Konfigurationsdatei sieht dann wie folgt aus:
[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn
[dn]
C=DE
ST=NRW
L=MeinOrt
O=MeinName
emailAddress=webmaster@example.private
CN = test.example.private
Der gewünschte Domainname steht in der letzten Zeile. Für eine andere Domain muss nur diese Zeile angepasst werden.
Ich würde aber auch für die anderen Werte im Bereich [dn] passende Werte eintragen.
Ich habe die Konfigurationsdatei unter dem Dateinamen test.example.csr.cnf gespeichert.
Der CSR und der private Schlüssel werden dann mit diesem Befehl erstellt:
openssl req -new -sha256 -nodes \
-out test.example.csr \
-newkey rsa:2048 -keyout test.example.key \
-config test.example.csr.cnf
Der private Schlüssel wird in der Datei test.example.key abgelegt. Er wird später auch für die Konfiguration des (Web)Servers benötigt.
Der CSR befindet sich in der Datei test.example.csr. Für die Erzeugung des Zertifikats wird nur der CSR benötigt.
Server-Zertifikat erstellen
Für die Erstellung des Server-Zertifikats wird zunächst eine weitere Konfigurationsdatei erstellt:
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = test.example.private
Auch hier muss für andere Domains nur jeweils die letzte Zeile angepasst werden. Der Eintrag in dieser Zeile muss unbedingt exakt dem Eintrag CN in der Konfigurationsdatei für die CSR-Erstellung entsprechen.
Die Konfigurationsdatei habe ich unter dem Namen test.example.ext.cnf gespeichert. Neben dieser Konfigurationsdatei und der CSR-Datei werden auch das Zertifikat und der private Schlüssel der CA benötigt.
Die Erstellung des Zertifikats erfolgt mit dem folgenden Befehl:
openssl x509 -req -in test.example.csr \
-CA myRoot.crt -CAkey myRoot.key -CAcreateserial \
-extfile test.example.ext.cnf \
-out test.example.crt -days 3650 -sha256
Das neu erzeugte Zertifikat ist in diesem Bespiel 10 Jahre (= 3650 Tage) gültig und wird in der Datei test.example.crt gespeichert. Der Inhalt des Zertifikats kann durch Aufruf des Befehls
openssl x509 -in test.example.crt -text -noout
überprüft werden. Wichtig sind die folgenden Einträge:
X509v3 extensions:
...
X509v3 Subject Alternative Name:
DNS:test.example.private
Es müssen unbedingt die “X509v3 extension” vorhanden sein und der “Subject Alternative Name” muss dem Domainnamen entsprechen.