Umstellen der FHEM Webseite mit SSL auf https
Standardmässig finden wir die Webseite von FHEM über das unverschlüsselte http-Protokoll vor. Wenn wir den FHEM Server über das Internet zugänglich machen wollen, dann ist eine Verschlüsselung des Nachrichtenverkehrs durch eine Umstellung auf das https-Protokoll unerlässlich. Wenngleich dies nicht unser Ziel ist, dann ist der FHEM Server sehr oft über WLAN angebunden. Trotz Absicherung des WLAN über eine WPA2-Verschlüsselung macht es Sinn, die Weboberfläche des FHEM Rechners nur noch verschlüsselt anzubinden.
Wir wollen alle eine große Reichweite unseres WLAN im Haus haben. Umgekehrt ist das WLAN dann aber auch sehr oft noch bei entfernteren Nachbarn oder auf der Straße zu erreichen. Mit entsprechenden Tools ist es ein Leichtes, den WLAN Funkverkehr mitzuschneiden und später in Ruhe auszuwerten. Im Rahmen einer Demonstration eines ehemaligen Hackers durfte ich einmal Zeuge sein, wie einfach es ist, über ein eigentlich geschütztes WLAN mitzuschneiden, auf welchen Internetadressen man dort gerade unterwegs ist.
Demgemäß wollen wir es solchen Leuten möglichst schwer machen, an unsere Hausautomatisierungs-Rechner zu kommen. Stellen wir uns nur vor, was passieren kann, wenn jemand über die ungesicherte Weboberfläche Garage und Haustüre öffnen könnte.
Selbstsigniertes Zertifikat erstellen
Zunächst melden wir uns per ssh an unserem Raspberry Pi an. Wir erstellen ein Verzeichnis, in dem wir die Schlüssel erzeugen und von dort auf dem Minirechner verteilen. Zunächst erzeugen wir den privaten Schlüssel.
cd mkdir https cd https openssl genrsa -out server.key 2048
Mit diesem privaten Schlüssel erzeugen wir den öffentlichen Schlüssel, den wir für das SSL Zertifikat brauchen.
openssl req -new -key server.key -out server.csr
Hier werden wir nach einigen Dingen gefragt. In meinem Beispiel hat mein lokaler Raspberry Pi den IP-Namen fhembackup. Die einzelnen Fragen sind in meinem Falle wie folgt:
- Country Name (2 letter code):
DE
- State or Province Name (full name):
Bayern
- Locality Name (eg, city):
Pfarrkirchen
- Organization Name (eg, company):
privat
- Organizational Unit Name (eg, section):
- Common Name (e.g. server FQDN or YOUR name):
fhembackup
- Email Address:
martin.koch@hausautomatisierung-koch.de
Nun kommt noch die Frage nach einem Passwort. Dieses sollte natürlich nicht zu einfach sein, zu lange darf es aber auch nicht sein. In meinem Falle hatte er angemeckert, dass das Passwort nicht länger als 20 Bytes sein darf.
Danach kommt nur noch die Frage nach einem optionalen Firmennamen. Diese kann man leer lassen.
Schließlich generieren wir das Zertifikat, dessen Gültigkeitsdauer wir auf 5 Jahre = 1826 Tage (ein Schaltjahr alle 4 Jahre) festlegen.
cp server.key server.key.orig openssl rsa -in server.key.orig -out server.key openssl x509 -req -days 1826 -in server.csr -signkey server.key -out server.crt
Als Bestätigung der Erzeugung des Zertifikats bekommen wir als Bestätigung folgende Ausgabe:
Zertifikat installieren
Sobald wir die Zertifikate erzeugt haben, müssen wir diese Dateien nur noch in das richtige Verzeichnis kopieren, auf das der FHEM Server zugreift. Das Installationsverzeichnis von FHEM liegt unter /opt/fhem
. Im Unterverzeichnis cert
sind die entsprechenden Zertifikate zu hinterlegen. Wir kopieren die Dateien nun noch dorthin. Zur Absicherung setzen wir noch die richtigen Berechtigungen.
sudo mkdir /opt/fhem/certs sudo chmod 711 /opt/fhem/certs sudo cp ~/https/server.key /opt/fhem/certs/server-key.pem sudo cp ~/https/server.crt /opt/fhem/certs/server-cert.pem sudo chmod 644 /opt/fhem/certs/server-key.pem sudo chmod 644 /opt/fhem/certs/server-cert.pem
Nun haben wir alles installiert, so dass wir die Weboberfläche nur noch verschlüsselt erreichen können.
FHEM auf https umstellen
Wir müssen jetzt nur noch in FHEM das Attribut HTTPS für die Oberflächen WEB, WEBphone und WEBtablet setzen. Dazu geben wir in der Kommandozeile von FHEM (in umgekehrter Reihenfolge) die Attribute an und stellen alle drei Oberflächen auf HTTPS um:
attr WEBtablet HTTPS attr WEBphone HTTPS attr WEB HTTPS
Als letztes speichern wir die geänderten Attribute ab, in dem wir auf Save config
klicken. Im Folgenden ist die Weboberfläche nur noch über die sichere https-Variante aufrufbar. Sobald wir nun im Browser die aufgerufene Seite noch einmal laden wollen, kann die Seite nicht mehr gefunden werden, da nun das Protokoll http abgewiesen wird.
Haben wir bisher als Adresse http://fhembackup:8083
eingeben müssen, so ist sie jetzt nur noch über https://fhembackup:8083
zu erreichen.
Zuletzt aktualisiert am 25.06.2017.
Ich habe nach dieser Anleitung die Umstellung auf https gemacht.
Jetzt bekomme ich aber beim Start von FHEM Error Log Einträge die ich nicht weg bekomme.
telnet SSL/HTTPS error: SSL connect accept failed because of handshake problems (peer: IP-Adresse)
Was muss ich deswegen noch anpassen?
Hallo,
FHEM ist aber nur noch über https, und nicht mehr über http erreichbar?
Wenn das funktioniert, sind wir schon mal auf dem richtigen Weg.
Es gibt keine eindeutige Antwort auf den Error-Log Eintrag mit den Handshake Problems. Aber wenn die Zertifikate passen – und davon gehe ich aus, wenn FHEM nun über https erreichbar ist, dann könnte es sein, dass jemand von aussen (ausserhalb FHEM) weiter versucht, sich über das http-Protokoll zu verbinden. Welche IP-Adresse steht denn in der im Error Log drinnen? Welches Gerät is die peer-IP-Adresse?
Vielleicht hilft hier auch der Beitrag im FHEM Forum weiter:
https://forum.fhem.de/index.php?topic=75155.0
Gruß
Martin
Hallo Martin, diesmal bin ich bei diesem thema. Hab deine Anleitung genau so ausgeführt. FHEM ist auch noch über https erreichbar. Bekomme nun alle paar sec folgende Meldung im Log: FHEMWEB SSL/HTTPS error: SSL accept attempt failed error:1408F09C:SSL routines:ssl3_get_record:http request (peer: 192.168.178.20)
Die IP ist von einem Repeater im WLAN Netz. Der Beitrag oben hilft mir leider nicht weiter. Hast Du evtl einen Lösungsansatz? Grüße
Korrektur: Entschuldige, es ist nicht die IP vom Repeater, sondern vom Hauptrechner (Mac)
Hallo Timo,
ich war jetzt 3 Tage auf Dienstreise und habe mir Deine Fehlermeldung angesehen.
Da scheint etwas mit den Zertifikaten nicht zu stimmen. Es könnte aber auch in die Richtung gehen, wie im FHEM Forum beschrieben:
https://forum.fhem.de/index.php?topic=61511.0
Zusätzlich dazu habe ich in der fhem.cfg relativ weit oben folgende Zeile eingefügt:
attr global sslVersion SSLv23:!SSLv3:!SSLv2
Damit konnte ich relativ viele SSL-Fehler abstellen.
Allgemein muss ich mittlerweile sagen, dass es mit den selbst erstellten Zertifikaten zwar ein Schritt in die richtige Richtung ist, man wird aber die Warnungen und Zertifikatsfehler im Browser auf diese Weise nicht los, da die Zertifikate selbst ausgestellt wurden. Das finde ich lästig und für viele Leute mittlerweile beunruhigend – obwohl die Verschlüsselung ja aktiv ist auch wenn sie nicht von einer zentralen Stelle zertifiziert wurde.
Mittlerweile gehe ich den Schritt mit letsencrypt, dazu werde ich in der nächsten Zeit ein eigenes Tutorial erstellen. Man findet hier einiges im Netz, aber ohne Anpassungen habe ich auch länger gebraucht und man muss seinen Zugangsrouter (bei mir die Fritzbox) ins Internet entsprechend einstellen, sonst läuft es nicht.
Gruß
Martin