Eigenes SSL-Zertifikat für die Lokale Entwicklung

Webdevelopment Jan 1, 2020

Datensicherheit ist heute schon ein wichtiges Thema. Daher ist eine SSL-Verschlüsselung in einer Webanwendung nicht mehr wegzudenken. So ist es auch Sinnvoll die lokale Entwicklungsumgebung so einzurichten, das ausschließlich nur noch lokal gearbeitet wird.

Vorbedingungen

Bevor wird nun mit der Umsetzung starten, ist es notwendig, dass wir noch openssl (opens new window)installieren. Ich habe das Glück das es in der Git-Shell von Git (opens new window)dabei ist.

Root Zertifikat erstellen

Bevor wir eigene Zertifikate erstellen können, ist ein eigenes Root Zertifikat erstellen. Das root Zertifikat ist dazu da, um weitere Zertifikatstypen zu erstellen. Doch bevor wir ein Root-Zertifikat erstellen können, wird ein Schlüssel benötigt. Dazu reicht folgender Befehl

openssl genrsa -des3 -out rootCA.key 2048

Dieser Befehl sagt eigentlich aus das wir ein RSA (opens new window)Schlüssel erstellen der eine Stärke von 2048 Bit besitzt und diesen dann in die Datei rootCA.key exportiert.

Achtung! Bei der Ausführung wird jetzt ein Passwort erfragt, dieses Passwort wird immer wieder bei einer Zertifikatsanforderung abgefragt. Daher sollte das Passwort gut gemerkt werden.

Jetzt da ein Schlüssel vorliegt, kann diese Schlüsseldatei verwendet werden, um ein Root-Zertifikat zu erstellen. Dazu reicht folgender Befehl aus:

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

Damit wird ein Request für ein neues Zertifikat des Typs x.509 (opens new window)gestellt. Das Zertifikat soll eine sha256 Verschlüsslung aufweisen und nur 1024 Tage gültig sein. Das ganze soll mit dem Root-Key rootCA.key verschlüsselt werden. Das Ergebnis muss in die Datei rootCA.pem abgelegt werden.

Hier wird Bei der Ausführung das Passwort für den Root Key abgefragt, welches wir beim erstellen des Schlüssels angegeben haben.

Passwort Abfrage

Wenn das richtige Passwort eingegeben wurde, werden nun ein paar allgemeines Daten abgefragt, die dann im Zertifikat hinterlegt werden.

Da es sich hier um ein lokales Zertifikat für die Entwicklung handelt, können die Eingaben frei gewählt werden.

Dateneingabe

Nach Abschluss existieren nun zwei Dateien

  • rootCA.key
  • rootCA.pem

Die .key -Datei beinhaltet unseren Schlüssel. Die .pem-Datei beinhaltet unser Root Zertifikat.

Root Zertifikat Vertrauenswürdig machen

Da wir nun unser Zertifikat habenbringt es dem System nichts, wenn es auf der Platte herumliegt. Das System muss wissen, das es vertrauenswürdig ist. Daher ist nun der Schritt das Zertifikat zu vertrauen.

Dazu startet man die Microsoft Management Konsole.

Dazu drücken wir die Tastenkombination windowstate+r und geben mmc ein.

Anschlißend ist das Snap-in "Zertifikate" zu laden.

Zertifikatsverwaltung

Wichtig ist das hier die option Computerkonto gewählt, und sich zum Lokalen Computer verbunden wird

Auswahl

Zum Import wird auf den Knoten Vertrauenswürdige Stammzertifizierungsstellen mit der rechten Maustaste Geklickt. Dann auf Alle Aufgaben->Importieren.

Nun ist es ein leichtes, das Root Zertifikat (rootCA.pem) zu importieren. Nach dem Import ist unser Zertifikat auch im Speicher vorhanden

Importiertes Zertifikat

War es das? Nein denn es wurde dem System nur mitgeteilt das es dem Root Zertifikat trauen soll. Jedoch weis der Browser nichts von seinem Glück. Denn es ist jetzt noch ein Domänen Zertifikat mit unserem Root Zertifikat zu erstellen.

Zertifikatsschlüssel erstellen

Mit dem Root-Zertifikat ist man in der Lage ein Domänen SSL Zertifikat zu erstellen. Dieses Zertifikat wird dann bei den Browsern bekannt gemacht, indem es schlichtweg installiert wird.

Doch bevor ein SSL Zertifikat erstellt wird, bedarf es erst ein Schlüssel der für das Zertifikat zuständig ist. Dazu ist folgender Befehl auszuführen:

openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key

Bei der Ausführung werde Informationen abgefragt, welche dann in das Zertifikat hineingelangen. Um diese manuellen Eingaben zu umgehen kann man eine Konfigurationsdastei erstellen. Diese Datei (localhost.csr.cnf) hat dann folgenden Inhalt:


[req]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = dn

[dn]
C=DE
ST=RandomState
L=RandomCity
O=RandomOrganization
OU=RandomOrganizationUnit
emailAddress=hello@example.com
CN = localhost

Dies gibt dann zwei neue Dateien aus

  • server.key
  • server.csr

Der Schlüssel ist in der Datei server.key hinterlegt.

SSL-Zertifikat erstellen

Man sagt immer das eine Zertifikatsanfordeung stellen muss. Quasi fordert man ein SSL Zertifikat vom Root Zertifikat an. Dazu werden aber noch Angaben zur Verwendung des Zertifikats usw. benötigt. Diese Angaben liegen in einer v3.ext Datei vor.

Folgender Inhalt ist dort einzufügen

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost

Nun können wir mit dem folgenden Befehl unser SSL Zertifikat erstellen

openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile __v3.ext__

Bei der Ausführung wird noch mal ds Passwort für das Root Zertifikat abgefragt. Des Weiteren werden noch diie Informationen aus dem Zertifikatsschlüssel ausgegeben.

SSL-Zertifikat Erstellung

SSL Zertifikat verwenden

Jetzt, da wir ein eigenes Zertifikat besitzen ist es nur noch logisch das wir dieses auch verwenden. Daher wird das Zertifikat eimal installiert. Dazu klicken wir doppelt auf das Zertifikat und wählen Zertifikat installieren aus.

Zertifikat installieren

Anschliessend muss das Hostsystem (Beispielsweise der NodeJs oder Reactanwendung) noch mitgeteilt werden, dass es ein eigenes SSL Zertifikat verwenden soll.

Beispiel Anwendung bei React (webpack dev server)

Die Inhalte der beiden Dateien

  • server.key
  • server.crt

müssen in die Datei server.pem abgespeichert werden: Dabei reicht es aus, die Inhalte nacheinander hinein zu koppieren. Anschließend ist die Datei im relativen Verzeichnis node_modules/webpack-dev-server/ssl/server.pem zu hinterlegen. Wenn bereits eine Datei existiert ist diese zu überschreiben.

Jetzt kann die Applikation gestartet werden. Ab diesen Zeitpunkt wird das SSL Zertifikat verwendet, welches selbst erstellt wurde und im Browser ist dies als vertrauenswürdig gekennzeichnet.

Gesicherte Verbindung

Fazit

Ich weis, man kann einfach die bestehenden Zertifikate verwenden und diese im Zertifikaten Store hinterlegen. Das ist einfacher und hat weniger Arbeit. Doch ich habe mir gedacht, dass ich das ganze auch mal etwas verstehen will. Ich konnte dadurch viel lernen und habe nun auch ein eigenes Zertifikat, welches ich dann auch für eine Authentifizierung verwenden könnte. Denn durch das Root Zertifikat ist es mir erlaubt, weitere Zertifikate zu erstellen.

Was denkt ihr? Schreibt doch in die Kommentare, ich bin gespannt auf eure Meinung.

Tags