Eigenes Zertifikat inkl. RootCA

Bestimmt kennt ihr das … ihr setzt eine eigene, lokale Nextcloud auf (z.B. auf einem Raspi mit NextCloudPi), funktioniert alles wunderbar. Aber in der URL meckert Chrome, Vivaldi oder Firefox, dass das https-Zertifikat nicht gültig ist.

Die Lösung: wir erstellen unsere eigene RootCA und ein Zertifikat für unseren raspi.

Hier eine hoffentlich Schritt-für-Schritt-Anleitung:

Vorbereiten – ein Linux

Wir brauchen ein Linux-System für openssl. Ich habe Windows10 und mache es mir daher einfach … WSL (Windows Subsystem für Linux) installiert und dann Ubuntu darauf laufen lassen. Ein Linux innerhalb von Windows, läuft wunderbar.

Falls ihr das auch wollt:

  1. WSL2 für Windows installieren
  2. Ubuntu 20.04 installieren aus dem Windows Shop

Zertifikate erzeugen

Zuerst benötigen benötigen wir einen privaten Schlüssel für unserer rootCA (heißt bei mir haschickCA). Also einfach eingeben:

openssl genrsa -aes256 -out haschickCA.key 4096

Dabei wird ein Passwort abgefragt. Dieses (wie auch die haschickCA.key) unbedingt geheim halten. Am besten in eurem Passwort-Manager (bspw. KeePass) speichern.

Dann benötigen wir das Root-Zertifikat (was wir in Windows, im Android, … installieren werden):

openssl req -x509 -new -nodes -extensions v3_ca -key haschickCA.key -sha256 -days 2136 -out haschickCA.crt

Jetzt haben wir unser Root-Zertifikat (in diesem Fall die Datei haschickCA.crt).

Nun weiter im Text mit dem eigentlichen Zertifikat für unseren raspi.

Die Logik ist fast analog:

  1. privaten Schlüssel erzeugen, aber diesmal ohne Passwort
  2. Zertifikatsanfrage erzeugen, von der CA signieren lassen -> das Ergebnis ist unser SSL-Zertifikat

Für Schritt 1 (privaten Schlüssel ohne Passwort erzeugen)

openssl genrsa -out raspi.key 4096

Für Schritt 2:

Zertifikatsanforderung (CSR – Certificate Signing Request) erzeugen:

openssl req -new -sha256 \
    -key raspi.key \
    -subj "/C=DE/ST=SN/O=Frank Haschick/OU=raspi/CN=raspi" \
    -reqexts SAN \
    -config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:raspi")) \
    -out raspi.csr

CSR signieren und damit Zertifikat anlegen

openssl x509 -req -extfile <(printf "subjectAltName=DNS:raspi\r\nextendedKeyUsage=serverAuth") -days 825 -in raspi.csr -CA haschickCA.crt -CAkey haschickCA.key -CAcreateserial -out raspi.crt -sha256

Die CSR-Datei benötigt man nicht mehr, die kann man wieder löschen

rm raspi.csr

Fertig, SSL-Zertifikat ist da 🙂

Falls ihr das Ubuntu auf dem WSL laufen habt (wie oben geschrieben), könnt ihr einfach

explorer.exe .

eingeben, und der Windows-Explorer wird gestartet mit genau dem Verzeichnis wo ihr gerade drin gewesen seid, wo also eure Zertifkate liegen.

Alternativ kann man im Windows Explorer auch „\wsl$\“ eingeben und dann zu seiner Linux-Distribution und seinem Verzeichnis wechseln

Zertifikat in raspi / Nextcloud hinterlegen

Jetzt wo ihr euer Zertifikat habt, müsst ihr es auf dem raspi hinterlegen.

Ihr benötigt euer rootCA (haschickCA.crt bei mir), die raspi.crt und die raspi.key.

Die auf den raspi kopieren und dann per SSH auf den raspi einloggen.

RootCA hinterlegen

Ihr solltet die RootCA nicht nur im Windows hinterlegen (dort bitte „Vertrauenswürdige Stammzertifizierungsstellen“ als Speicher auswählen), sondern auch im raspi.
Dazu die RootCA an die richtige Stelle kopieren:

sudo cp haschickCA.crt /usr/share/ca-certificates/haschickCA.crt

Und dann die CA-Pakete neu einlesen:

sudo dpkg-reconfigure ca-certificates

Dort dann das Zertifikat mit Leertaste auswählen und mit ENTER bestätigen.

Zertifikat in Apache hinterlegen

Erstmal kopieren wir unsere raspi-Schlüssel und das Zertifikat an die richtige Stelle:

sudo cp raspi.crt /etc/ssl/certs/raspi.crt
sudo cp raspi.key /etc/ssl/private/raspi.key

Welche Zertifikate von Apache genutzt werden, steht in der nextcloud.conf … also passieren wir die an:

sudo vi /etc/apache2/sites-enabled/nextcloud.conf

Wer mit vi nicht so gut umgehen kann … „i“ drücken zum einfügen.

Dann die 2 Zeilen austauschen (bei mir Zeile 7 und 8):

    SSLCertificateFile      /etc/ssl/certs/raspi.crt
    SSLCertificateKeyFile /etc/ssl/private/raspi.key

Zum Speichern „Escape“ drücken, dann „:wq!“ (alles ohne die „).

Dann noch von Apache die Config neu einlesen lassen:

sudo systemctl reload apache2

Dann probiert es im Browser aus: https://raspi sollte keine Fehlermeldung mehr erzeugen.

Viel Erfolg!

Update 16.03.2021

Das oben beschriebene funktioniert mit Windows und Android, aber nicht mit iOS. Dort gibt es seit iOS 13 neue Regeln (825 Tage Gültigkeit und extendedKeyUsage ergänzt) -> geht jetzt auch auf iOS

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.