Im Beitrag Lokale Zertifizierungsstelle (certificate authority – CA) erstellen wurde auf einer Linux-Maschine eine lokale Zertifizierungsstelle erstellt mittels der lokale Zertifikate signiert werden können.

Hier wird eine Zertifikatsanfrage (Certificate Signing Request – CSR) erstellt welche mittels Zertifizierungsstelle signiert wird um damit ein gültiges Zertifikat zu bekommen.

Im Beispiel wird ein Zertifikat für einen Website, welche unter https://server.domain.tld erreichbar ist, erstellt.
Für den Server muss der vollqualifizierte Namen (Fully Qualified Domain Name – FQDN) der eigenen Domain angeben werden.

Zertifikatsanfrage erstellen

Da Google Chrome seit der Version 58 das Feld Common Name aus dem Zertifikat ignoriert und nun die Einträge aus den Feld Alternativer Antragstellername (Subject Alternative Name – SAN) zur Überprüfung verwendet, die SAN in OpenSSL jedoch nicht in der Befehlszeile angeben werden können, muss bei der Zertifikatsanfrage und sie Signierung mit Konfigurationsdateien gearbeitet werden.

Am

Folgende Schritte erfolgen am Server welcher das Zertifikat bekommen soll 

benötigt.

Wechseln ins Verzeichnis /etc/ssl/private:

cd /etc/ssl/private

Erstellen eines privaten Schlüssels (private key):

openssl genrsa -out myserver.domain.tld.key 4096

Erstellen  einer Datei namens createcsr.conf:

touch createcsr.conf

Mit folgendem Inhalt:

nano createcsr.conf

Die Zeilen 6 bis 11 müssen an den eigenen Bedarf angepasst werden, die Zeilen 19 bis 22 enthalten alle für den Aufruf des Servers benötigten namen und IP-Adressen:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (z.B.: AT)
stateOrProvinceName = State or Province Name (z.B. Tirol)
localityName = Locality Name (z.B.: Innsbruck)
organizationName = Organization Name (z.B.: Firma XYZ)
organizationalUnitName = Organizational Unit Name (z.B: IT Administration)
commonName = Common Name (FQDN z.B.: myserver.domain.tld)

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver.domain.tld
DNS.2 = myserver
IP.1 = 192.168.0.100


Mit dieser Konfigurationsdatei könnenwird wir unsereeine Zertifikatsanfrage erstellen:erstellt:


openssl req -new -key /etc/ssl/private/myserver.domain.tld.key -out myserver.domain.tld.csr -config createcsr.conf

Die Zertifikatsanfrage können wirwird wie folgt überprüfen:überprüft:


openssl req -noout -text -in myserver.domain.tld.csr

Zertifikatsanfrage signieren

Die Signierung der Zertifikatsanfrage erfolgt nun auf dem Server, auf den wirdem die lokale Zertifizierungsstelle eingerichtet haben.wurde.

WirErstellen erstelleneines einneuen neues UnterverzeichnisUnterverzeichnisses im Verzeichnis CA mit dem Namen myserver:


mkdir /CA/Myserver

WirKopieren kopieren dieder Zertifikatsanfrage myserver.domain.tld.csr in das neu erstellte Verzeichnis. Dafür verwenden wir z.B. WinSCP.

Um die Zertifikatsanfrage mit den SAN-Einträgen signieren zu könnenkönnen, benötigen wirwird eine Konfigurationsdatei mit dem Namen signcsr.conf welche wir wie folgt erstellen:benötigt:


touch signcsr.conf

Wir öffnen diese mit unserem Editor und kopieren folgenden Inhalt hinein, wobei die Zeilen 5 und folgende wieder nach unserenden Anforderungen angepasst werden müssen:


[SAN]
subjectAltName = @alt_names

[alt_names]
DNS.1 = myserver
DNS.2 = myserver.domain.tld
DNS.32 = weiteremyserver DN oder FQDN
IP = 192.168.0.100

Wir können nun unsere Zertifikatsanfrage signieren, dafür benötigen wir jedoch das Passwort für den privaten Schlüssel der lokalen Zertifizierungsstelle:


openssl x509 -req -days 3650 -in myserver.domain.tld.csr -CA ../ca-testfirma.crt -CAkey ../ca-testfirma.key -set_serial 01 -out myserver.domain.tld.pem -extfile signcsr.conf -extensions SAN

Firefox lässt kein Zertifikat zu welches die gleiche Seriennummer hat wie ein bereits bestehendes Zertifikat (Error code: sec_error_reused_issuer_and_serial). Für weitere Zertifikate bei -set_serial fortlaufende Nummern verwenden!

Das Zertifikat können wir wie folgt überprüfen:


openssl x509 -noout -text -in myserver.domain.tld.pem

Das Zertifikat myserver.domain.tld.crt kopieren wir nun ins Verzeichnis /etc/ssl/certs auf unseren Webserver und verwenden es dort für die Einrichtung der SSL-Webseite.