FHEM https

FHEM mit https absichern

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.

FHEM https

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:

FHEM serverkey

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.

5 Gedanken zu „FHEM mit https absichern“

  1. 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?

    1. 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

  2. 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

    1. 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

Schreibe einen Kommentar

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