Seite wählen
  • Erstelle deine eigene Zertifizierungsstelle
  • Generiere deine eigenen Zertifikate für IPs und Domains
  • Vertraue deiner Zertifizierungsstelle auf allen Geräten.

Deine eigene Zertifizierungsstelle

Zunächst benötigen wir eine eigene Zertifizierungsstelle (auch CA genannt „certificate authority“ ) welche wir uns im Folgenden generieren lassen.

openssl genpkey -algorithm RSA -aes128 -out private-ca.key -outform PEM -pkeyopt rsa_keygen_bits:2048

Im Anschluss generieren wir uns den privaten Schlüssel der Zertifizierungsstelle.

Diese CA ist in diesem Fall 10Jahre lang gültig. Die Laufzeit kann mit dem Parameter -days verlängert werden.

openssl req -x509 -new -nodes -sha256 -days 3650 -key private-ca.key -out self-signed-ca-cert.crt

Hier muss auch das Passwort dieser Zertifizierungsstelle gesetzt werden. Dieses wird für jedes weitere Zertifikat gebraucht und sollte deshalb sicher aufbewahrt werden.

Es müssten jetzt zwei neue Dateien erstellt worden sein.

Zertifikate generieren

Jetzt generieren wir die Zertifikate für die einzelnen Services unseres Heimnetzwerks.

Wie auch bei der Zertifizierungsstelle brauchen wir nun einen Privat Key und auch einen Public Key.

Der Public Key kann sehr einfach mit folgendem Command generieren.

openssl genpkey -algorithm RSA -out cert.key -outform PEM -pkeyopt rsa_keygen_bits:2048

Im Nachfolgenden wandeln wir diese cert.key Datei in eine cert.csr Datei umwanden

openssl req -new -key cert.key -out cert.csr

Dann brachen wir noch eine Konfigurationsdatei, welche mit nano oder einem ähnlichen Editor angelegt werden kann.

nano cert.ext

In diese cert.ext Datei fügen wir nun folgende Zeilen ein.

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

 

[alt_names]
IP.1 = <IP>
DNS.1 = <Domain>

Dabei kann nun die IP oder auch die Domain, welche für deinen Dienst verwendet werden soll, eingefügt werden. Auch sind Whitelist Zertifikate möglich, also dass ein Zertifikat für alle Subdomains einer Domain gültig sein soll.
Hier ein Beispiel: DNS.1 = *.example.local
Wie die 1 schon vermuten lässt, können auch noch weitere Domains oder auch IPs angegeben werden. Ein Beispiel:

[…]

[alt_names]
 
IP.1 = 192.168.0.1
 
IP.2 = 192.168.0.2
 
IP.3 = 192.168.0.3
 
DNS.1 = example.local
 
DNS.2 = *.example.local

Eine generelle Zertifizierung aller Domains einer Toplevel Domain (z.B. *.de oder *.local) ist nicht möglich!

Der letzte Befehl lautet wie folgt:

openssl x509 -req -in cert.csr -CA self-signed-ca-cert.crt -CAkey private-ca.key -CAcreateserial -out cert.crt -days 365 -sha256 -extfile cert.ext

Dabei gibt der Parameter -days wieder die Anzahl der Tage an, die das Zertifikat gültig sein soll. In meinem Fall für ein Jahr ab dem Ausführen dieses Befehls.

Bonus

Falls du nun eine cert.pem Datei und keine cert.crt Datei brauchst, kann du diese ganz einfach erzeugen

openssl x509 -in cert.crt -out cert.pem -outform PEM

 

Meine Quellen

Cookie Consent mit Real Cookie Banner