SSL-Zertifikat – Certificate Signing Request (CSR) erstellen

Das Web ohne Verschlüsselung ist heutzutage gar nicht mehr vorstellbar. Sie bildet die Grundlage für viele Tätigkeiten wie Onlinebanking oder dem Onlineshopping und geschieht über das Protokoll HTTPS.

Ohne Verschlüsselung könnten alle Eingaben und Aktivitäten von jedem, der an der Leitung lauscht, mitgeschnitten und mit wenig Aufwand manipuliert werden.

Zwar sind auch über HTTPS laufende Verbindungen nicht 100%ig sicher, aber wesentlich besser geschützt als ohne.

Für die Verbindung werden SSL-Zertifikate benötigt, die den Webserver zu der aufgerufenen Domain quasi authentifizieren. Dabei wird überprüft, ob das Zertifikat von einer vertrauenswürdigen Zertifizierungsstelle (= CA, z. B. Let’s Encrypt) ausgestellt wurde und zu der Domain passt. Im Hintergrund werden weitere Parameter ausgehandelt, wie beispielsweise den Verschlüsselungsalgorithmus, den sowohl der Browser als auch der Server sprechen.
Stimmt auch nur eines der Merkmale nicht, wird die Verbindung als nicht sicher markiert und dem Benutzer als solche kenntlich gemacht.

Zwar ist es heute ohne großen Aufwand möglich, sich ein kostenloses Zertifikat über die CA „Let’s Encrypt“ ausstellen zu lassen. Jedoch besteht immer wieder die Notwendigkeit selbst ein Zertifikats-Request zu stellen und bei einer kostenpflichtigen oder in der eigenen Organisation bestehende CA einzureichen.

Hierbei gibt es mehrere Möglichkeiten ein solches CSR zu generieren (viele Wege führen nach Rom).
Einen davon möchte ich hier kurz mithilfe von „openssl“ aufzeigen.

Zuerst erstellen wir den Key für unser neues Zertifikat:

openssl genrsa -out "<Ablage->/<Pfad>/<für den>/<Key>.key" 2048

2048 ist hierbei die Größe des Keys in Bit und so wie im Beispiel zum Zeitpunkt des Artikels ausreichend. Dieser Wert kann nach Belieben erhöht (aber bitte nicht vermindert) werden, kostet aber im schlimmsten Fall mehr Rechenleistung.

Als nächstes erstellen wir den Certificate Signing Request (CSR).

Hierzu benötigen wir noch eine Konfiguration mit allen Parametern, wie Stadt, Land, E-Mail und natürlich den damit abgedeckten Domains.

Hier ein Beispiel:

[ req ]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[ req_distinguished_name ]
C = DE
ST = Bayern
L =  München
O = Example AG
OU = IT
CN = example.com
emailAddress = [email protected]

[ v3_req ]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = example.com
DNS.2 = www.example.com

Ausschlaggebend sind vor allem die Felder „CN“ und „alt_names“.
In CN wird die „Hautpdomain“ (example.com) eingetragen.
Unter „alt_names“ wird die selbe Domain nochmal hinzugefügt und zusätzlich alle weiteren Domains, für die das Zertifikat gültig sein soll.

Nun kann das CSR anhand der Konfiguration generiert werden:

openssl req -new -out "<Ablage->/<Pfad>/<für den>/<Request>.csr" -key "<Ablage->/<Pfad>/<des>/<Keys>.key" -config "<Ablage->/<Pfad>/<der>/<Konfiguration>.conf"

Nach den beiden Befehlen haben wir nun zwei Dateien. Einmal mit .key – das ist unser privater Schlüssel und sollte sehr vertraulich behandelt werden, da damit die zukünftigen HTTPS-Verbindungen verschlüsselt werden.
Die andere Datei ist eine .csr und wird der CA weitergereicht, damit sie damit das Zertifikat ausstellen kann.
Lief der Ausstellungsprozess sauber durch, erhältst du i. d. R. ein fertiges Zertifikat im PEM-Format und manchmal auch im PKCS7- oder PKCS12-Format.

Optional: PEM in PKCS12-Format umwandeln.

Webserver wie Apache Tomact oder der Windows IIS benötigen das Zertifikat nicht als einzelne Dateien als PEM, sondern in einem so genannten Keystore (.p12 bzw. .pfx).

Zusammen mit dem CA- und ggf. zusätzlich mit dem Intermediate-Zertifikat (erhältst du von der CA deines Vertrauens – beide in einer Datei: erst das Intermediate und danach das CA) kannst du diesen Keystore aber ganz leicht selbst zusammenbauen.

openssl pkcs12 -export -inkey "<Ablage->/<Pfad>/<des>/<Keys>.key" -in "<Ablage->/<Pfad>/<deines>/<Zertifikats>" -certfile "<Ablage->/<Pfad>/<des>/<CA-Zertifikats>" -out "<Ablage->/<Pfad>/<für den>/<Keystore>.p12" -passout "Dein Passwort"

Das Passwort musst du später in der Konfiguration deines Webservers angeben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert