Anbei eine Beschreibung zur Erstellung von selbst signierten Zertifikaten für den WEB Zugriff über https ohne Fehlermeldung und Nachfrage mit Hilfe eines einfachen PERL Programms. Das Programm erstellt einmalig ein root-Zertifikat mit root-Schlüssel (wenn sie nicht gelöscht werden) und beliebige damit signierte Zertifikate, auch mehrmals. Über PERL kann kein Passwort vergeben werden (zumindest habe ich nichts gefunden), daher muss der root-Schlüssel unbedingt vor fremdem Zugriff geschützt werden. Am besten erstellt man auf einem übrigen USB Stick ein Subdirectory und kopiert das Perl Programm dorthin und führt die entsprechen Einstellungen (gekennzeichnet mit XXX) im Programm mit einem Editor durch. Sinnvolle Bezeichnungen helfen, das Zertifikat später wieder zu erkennen. Root-Zertifikat/-Schlüssel wird nur einmal erstellt, denn es muss mit einigem Aufwand auf allen Systemen, die auf den WEB Server zugreifen wollen installiert werden.
Auf einem Linux oder Raspbian System ein Terminal in diesem Directory öffnen und das Programm durchführen. Danach befinden sich die Zertifikate root/FHEM/Fritzbox als .pem im Directory. Diese Files sind im ASCII Format. Für das root-Zertifikat wird aber meist die binäre Version benötigt.
Bitte mit folgenden Befehl die binäre Datei erstellen:
openssl x509 -inform PEM -outform DER -in root-ca.pem -out root-ca.crt
Die Datei root-ca.crt muss jetzt auf alle Systeme verteilt werden:
FIREFOX (Windows/Linux) Firefox hat einen eigenen Zertifikatspeicher, zu erreichen über
Firefox: Einstellungen -> Datenschutz und Sicherheit -> Zertifikate -> Zertifikate anzeigen, dann unter Reiter Zertifizierungsstellen das root Zertifikat importieren, Häckchen setzen fertig.
FIREFOX (Android) hier kann kein eigenes Zerfifikat im Firefox Speicher installiert werden. Einzige Möglichkeit, Wechsel zu Firefox beta, hier kann man mit about:config die Konfiguration so ändern, dass Firefox auf System-Zertifikate zugreift.
Firefox beta: about:config eingeben und dann die Varibale "security.enterprise_roots.enabled" auf true setzen, fertig
Für Betriebssystem nahe Browser muss das Zertifikat im System direkt integriert werden.
Linux: Das root-Zertifikat (root-ca.crt) wird nach "/usr/local/share/ca-certificates" kopiert und dann wird der Befehl
sudo update-ca-certificates
ausgeführt.
Windows: Einstellungen -> Update und Sicherheit -> Netzwerk und Internet -> Netzwerk- und Freigabecenter -> Internetoptionen (unten links). Dort auf Reiter Inhalte -> Zertifikate und dann das root-Zertifikat (root-ca.crt) unter dem Ordner "Vertrauenswürdige Stammzertifizierungsstellen" importieren. Fertig
Android: Zugriff auf die Datei root-ca.crt über z.B. Netzlaufwerk oder sich selbst eine e-mail schicken. Die Datei root-ca.crt anklicken, dann öffnet sich der Zertifikatsmanager, Häckchen setzen und importieren. Fertig
Ergänzung
Android 11: Einstellungen -> Sicherheit -> Erweitert -> Verschlüsselung und Anmeldung -> Ein Zertifikat installieren -> CA-Zertifikat das root-ca.crt auswählen. Fertig
IOS: Habe ich leider nicht.
Nun muss das FHEM Zertifikat und Schlüssel im Ordner "/opt/fhem/certs" ersetzt werden.
Wer will kann noch das Fritzbox Zertifikat (Zertifikat und Schlüssel sind hier in einem File zusamengefasst) auf der Box installieren.
Mögliche Meldungen:
Android: Zieht man im Startbildschirm die Einstellungen nach unten kommt die Meldung "Das Netzwerk wird eventuell überwacht". Dies wird durch das root-Zertifikat verursacht. Solange der root-Schlüssel geschützt ist, stellt das kein Problem dar. Man ist halt keine offizielle Zertifizierungsstelle.
FHEM: Nach einem restart von FHEM oder schließen der Firefox App und wieder öffnen mit definiertem FHEM Reiter, erscheint folgende LOG-Meldung mehrfach:
"..... FHEMWEB SSL/HTTPS error: SSL accept attempt failed (peer: ...... "
Die Synchronisation zwischen Server und Client bzgl. der Verschlüsselung geht verloren und bedarf mehrerer Versuche bis die Verschlüsselung wieder ausgehandelt ist und bei jedem Versuch kommt diese Meldung. Also einfach ignorieren.
Zu diesem Thema: TcpServerUtils.pm (verwendet von FHEMWEB, telnet, MQTT2_SERVER, etc) erstellt beim gesetzten HTTPS/SSL Attribut und fehlen von einem Zertifikat automatisch ein selbstsigniertes Zertifikat, falls openssl auf dem Rechner vorhanden ist.
Ich vermute eher, dass Firefox den disconnect nicht richtig erkennt. Durch restart von Fhem wird ja alles neu aufgebaut und bei Neuaufruf von FHEMWEB mit meinem Zertifikat gibt es keine Meldungen.
Gruß HJB
Apropos Zertifikat (etwas off-topic, fuer den Fall, dass jemand sich hier auskennt :) ): ich hatte gestern in einem abgeschotteten Umfeld (kein Internet) eine Fehlermeldung von Chrome bekommen, der ein Problem mit dem "Certificate Transparency Log" bemaengelt hat. Nach Studium des Internets bin ich der Ansicht, dass das auch selbstsignierte Zertifikate betreffen muesste. Weiss jemand mehr dazu?