17 Nov 2022

Selbst signierte TLS-Zertifikate ohne CA

Wo die Pakete im Internet letztlich herlaufen und wer mitliest ist meist schwer zu überblicken. Deswegen Kommunikation im Internet sollte verschlüsselt stattfinden. Ein Standard hierfür ist TLS. Das hat durchaus Schwächen, jedoch funktioniert es in der Praxis. Falls ihr für einen Server kein Zertifikat habt, könnt ihr auch sein sogenanntes self-signed Zertifikat erstellen. Das bedeutet, dass der Schlüssel des Zertifikats zum Unterschrieben dieses Zertifikats verwendet wird. Self-signed Zertifikaten vertraut standardmäßig kein Client, bis es ihm explizit gesagt wird. In manchen Fällen, beispielsweise für Testzwecke, kann es aber trotzdem ausreichend sein.

Um ein self-signed Zertifikat zu erstellen, legt ihr zunächst eine Datei example.req an mit folgendem Inhalt, wobei ihr die Daten an eure Zwecke anpassen solltet, insbesondere den Servernamen unter CN und die Alternativnamen unter subjectAltName:

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

[ dn ]
C = DE
O = Internet Protocol over Avian Carriers
CN = example.com

[ subject_alt_name ]
subjectAltName = DNS:www.example.com, DNS:www2.example.com

Anschließend erstellt ihr ein Zertifikat mit folgendem Befehl:

$ openssl req -x509 -nodes -config example.req -extensions subject_alt_name -keyout example.key -out example.pem

Das fertige Zertifikat liegt unter example.pem und der private Schlüssel unter example.key.

Falls ihr keine alternativen Namen haben möchtet oder braucht, lasst ihr den ganzen Abschnitt subject_alt_name weg und verwendet stattdessen den folgenden Befehl:

$ openssl req -x509 -nodes -config example.req -keyout example.key -out example.pem

Das Zertifikat könnt ihr mit folgendem Befehl anschauen, um Beispielsweise den Hostnamen zu überprüfen oder den Fingerabdruck des Zertifikats zu sehen:

$ openssl x509 -text -noout -in example.pem

Die Zertifikate können dann normal genutzt werden, beispielsweise für einen Webserver. Jedoch werden die meisten Clients zurecht eine Fehlermeldung ausgeben und eine Bestätigung durch den Nutzer verlangen, da sie nicht wissen, ob ihr oder ein Angreifer das Zertifikat ausgestellt hat. Deshalbc sind die Zertifikate nicht für öffentliche Webseiten geeignet. Bevor ihr das Zertifikat bestätigt, prüft also bitte, ob es auch das richtige Zertifikat ist, beispielsweise mit dem Fingerabdruck.