Trusted Self-Signed Certificate erstellen

Mal was total spannendes für Nicht-Technik-Interessierte: Wie erstelle ich ein Trusted Self-Signed Zertifikat? Und was ist das überhaupt?

OK, vielleicht doch nicht so spannend. Aber kurz zur Erklärung: Siehst du das kleine Schlösschen oben links?

Sehr unauffälliger Pfeil

Das bedeutet, du bist verschlüsselt und sicher im Netz, bzw. auf dieser Seite unterwegs. Heutzutage geht das gar nicht mehr anders. Damit man dieses Schlösschen hat, braucht die Webseite ein Zertifikat, ausgestellt von einer vertrauenswürdigen Institution.

Vor ca. 283 Jahren, als das Internet noch relativ neu war, musste man Geld für sowas bezahlen, heute geht das über Dienste wie letsencrypt.org kostenlos.

Wenn man aber Entwickler ist, dann arbeitet man nicht im öffentlichen Bereich mit seiner Webseite, benötigt für manche Funktionen aber ein Zertifikat, das man sich selbst ausstellt und Windows davon überzeugt, vertrauenswürdig zu sein, auch wenn man total der Betrüger ist und Omas Gehstock wegkickt.

Jetzt zum technischen Teil, der ist nicht mehr so interessant!

CA generieren

Zunächst müssen wir uns ein Zertifikat ausstellen, das uns als Zertifikatsaussteller zertifiziert. Das ist dann der Private Key als CA ca.key.

# In ein Verzeichnis wechseln, wenn gewünscht
cd /home/mein-ssl-verzeichnis

# Private Key als CA erstellen
openssl genrsa -des3 -out ca.key 2048

Dann fehlt noch das Root-Zertifikat als CA ca.pem. Hier wird man einiges gefragt, was aber egal ist – bis auf den Common Name, denn das ist praktisch der Name des Zertifikats, der hinterher in Windows erscheint. Ich benutze “Bjoern”, das kannst du auch machen, wenn du den gleichen Vornamen hast. Falls du diesen Vornamen nicht hast, schlage ich eine Namensänderung vor, denn der ist echt geil.

openssl req -x509 -new -nodes -key ca.key -sha256 -days 1825 -out ca.pem

Mit der letzten Datei überzeugen wir Windows davon, dass wir vertrauenswürdig sind. Das geht z.B. über die Einstellungen in Chrome, oder auch über das Startmenü.

Ich hab das jetzt über Chrome gemacht, das geht natürlich auch anders.

Im folgenden Fenster auf “Vertrauenswürdige Stammzertifizierungstellen” klicken, die Datei ca.pem importieren und sich fragen, warum der Computer eigentlich nicht vertraut, denn schließlich sieht man den öfter als die eigene Mutter.

Zertifikat für die Webseite erstellen

Jetzt können wir die Zertifikats-Dateien für die lokale Webseite erstellen. Das wären der private Key <domain>.key und das CSR für die spätere Autorisierung über uns selbst <domain>.csr. Nicht vergessen, <domain> zu ersetzen!

openssl genrsa -out <domain>.key 2048
openssl req -new -key <domain>.key -out <domain>.csr

Als nächstes braucht es ein komisches Config-File <domain>.ext. Nicht fragen, versteh ich auch nicht. Diese Datei enthält:

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

[alt_names]
DNS.1 = <domain>

Anschließend ENDLICH die Zertifikate erstellen:

openssl x509 -req -in bueffel.local.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out <domain>.crt -days 825 -sha256 -extfile <domain>.ext

Das war’s! Als Bonus, und damit ich nicht den kompletten Artikel aus der Quelle nur übersetze, hier die Config für die Apache2-Datei:

<VirtualHost *:443>
    ServerName ...
    
    SSLEngine on
    SSLCertificateFile /.../<domain>.crt
    SSLCertificateKeyFile /.../<domain>.key
    
    ...
</VirtualHost>

Kleiner Hinweis: Chrome akzeptiert das Zertifikat vollkommen, bei Firefox wird gemeckert – nachdem man es aber dort per Klick bestätigt hat, funktioniert alles.

Quellen

Eigentlich hab ich zu 90% von dieser Seite abgeschrieben.
Björn Falszewski
27. Mai 2020
Disclaimer
Alle meine Artikel entstehen mit bestem Wissen und Gewissen, sind aber nicht perfekt und sollten immer nur als Ausgangspunkt für deine eigenen Recherchen bilden.

Sollte dir etwas Fehlerhaftes auffallen, freue ich mich über deine Nachricht!