- 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