Eigenes SSL-Zertifikat für die Lokale Entwicklung
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.
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.
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.
Wichtig ist das hier die option Computerkonto gewählt, und sich zum Lokalen Computer verbunden wird
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
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 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.
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.
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.