Erstellung von SSL-Zertifikaten zur Verwendung mit PING Diensten

* Übersicht über die aktuell verwendeten Zertifikate

Schritt 1: Schlüssel erzeugen

Das Kommando

openssl genrsa -out key.pem 2048

erzeugt einen 2048-bit RSA-Schlüssel, dieser wird nicht durch zusätzliche Verschlüsselung oder ein Passwort geschützt, da bei einem automatischen Start des Dienstes (z.B. Apache) niemand anwesend ist, der ein Passwort eingeben könnte.

/!\ Dementsprechend ist dafür zu sorgen, daß außer dem Dienst selbst möglichst nichts und niemand auf den Schlüssel zugreifen kann.

Schritt 2: Certificat Signing Request (CSR) erzeugen

Das Kommando

openssl req -new -key key.pem -out csr.pem

erzeugt interaktiv einen Signing Request. Die Fragen sind dabei wie folgt zu beantworten:

Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NRW
Locality Name (eg, city) []:Dortmund
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Verein zur Förderung der privaten Internet Nutzung (PING) e.V.
Organizational Unit Name (eg, section) []:Server Admins
Common Name (eg, YOUR name) []:www.ping.de
Email Address []:vorstand@ping.de

Dabei ist der Wert Common Name mit dem FQDN des Servernamens zu füllen.

/!\ Diese Stelle ist extrem wichtig, wird hier ein Fehler gemacht kann das Zertifikat hinterher nicht verwendet werden.

Die Fragen nach challenge password und optional company name werden mir leeren Eingaben beantwortet.

Schritt 2,5: subjectAltName

Chrome(ium) seit Version 58 unterstützt nicht mehr die Überprüfung von commonNames, daher ist es notwendig auch subjectAltNames ins Zertifikat aufzunehmen.

Sowohl CaCert als auch Let's Encrypt fügen den subjectAltName automatisch als Kopie des CN in das Zertifikat ein. Die Aufnahme das sAN in den Signing Request ist nur bei CAs notwendig, die das nicht automatisch erzeugen oder, wenn mehr als ein sAN in das Zertifikat übernommen werden soll.

Dafür wird ein Config-File benötigt:

[req]
req_extensions = v3_req

[ v3_req ]

# Extensions to add to a certificate request

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

[alt_names]
DNS.1 = www.ping.de

Schritt 3: Zertifikat erzeugen

Der in Schritt 2 erzeute CSR csr.pem wird nun an eine Zertifizierungsstelle weiter gegeben, die diesen -- evtl. gegen Zahlung einer Gebühr -- signiert. Das Ergebnis ist ein Zertifikat, welches zusammen mit dem in Schritt 1 generierten Schlüssel in der Konfiguration des Dienstes eingetragen werden muss.

/!\ Auf keinen Fall den in Schritt 1 generierten Schlüssel an die Zertifizierungsstelle schicken, der Schlüssel muss unter allen Umständen geheim bleiben.

Das fertige Zertifikat kann mit

openssl x509 -in cert.pem -noout -text

angezeigt werden.

Erweiterte Attribute

Evtl. kann es notwendig sein, neben den in Schritt 2 aufgeführten Standardattributen zusätzliche Attribute in das Zertifikat -- und damit in den CSR -- aufzunehmen. Dazu muss die Datei openssl.cnf aus dem Verzeichnis der systemweiten Installation (/etc/ssl oder /usr/lib/ssl) kopiert und wie folg modifiziert werden:

Im Abschnitt new_oids

streetAddress   = 2.5.4.9
postalCode      = 2.5.4.17

Im Abschnitt policy_match

streetAddress           = optional
postalCode              = optional

Im Abschnitt req_distinguished_name

postalCode                      = Postal Code
streetAddress                   = Street

/!\ Während in den Abschnitten new_oids und policy_match die Reihenfolge der Einträge irrelevant ist, ist diese im Abschnitt req_distinguished_name zu beachten:

  1. countryName
  2. postalCode
  3. stateOrProvinceName
  4. localityName
  5. streetAddress
  6. ...

Die Erzeugung des CSR erfolgt dann wie in Schritt 2 beschrieben, außer, daß noch die Optioen -config ./openssl.cnf angegeben werden muss. Der Aufruf lautet dann wie folgt:

openssl req -config ./openssl.cnf -new -key key.pem -out csr.pem

Externe Informationen

X.500 attribute types

Software/SSL-Zertifikate erstellen (zuletzt geändert am 2017-06-11 17:51:47 durch BodoBellut)