Homematic xml api zugriff schützen

Benutzer der XML API auf der Homeatic Zentrale (CCU) hatten ziemlich sicher bereits die selbe Idee wie ich:  Unterwegs komfortabel die Heizung der Wohnung mit dem Handy zu regulieren. Problem ist jedoch die Sicherheit: Die XML API bietet keinerlei Authentifizierung an.  Der erste Versuch war das absichern mit VPN. Der Komfort bleibt hier jedoch etwas auf der Strecke, da man mit dem Handy immer zuerst eine VPN Verbindung nach Hause aufbauen muss. Einfacher geht es natürlich direkt per https (Dank DynDNS Dienst der FritzBox).

Die Autorisierung habe ich über einen Reverse Proxy  in Form von NGINX auf meiner qnap Nas realisiert. Dieser soll eine Passwort Abfrage vor die API setzen.  Anstelle einer NAS würde sich hier natürlich auch ein Raspberry PI anbieten. Längerfristig will ich zwar die CCU durch die NAS komplett ersetzen, dazu fehlt mir aber erst einmal die Zeit.

Was ist nun zu tun:

Über die APP Manager auf der Administrations- Oberfläche installiert man zuerst das NGINX Paket.  Nun verbindet man sich per SSH auf die NAS und wechselt dort in das NGINX Verzeichnis: /share/CACHEDEV1_DATA/.qpkg/Nginx/nginx. Direkt dort habe ich eine Passwort Datei mit dem Namen htpasswd angelegt (vim). Deren Inhalt ist eine Liste mit Usernamen und gehashten Passworte die auf diversen Websites oder mit dem Kommando htpasswd erzeugt werden können. Leider nur nicht direkt auf der Nas:

Der zweite Schritt ist nun die NGINX Konfiguration. Im Unterverzeichnis conf befindet sich die Datei nginx.conf.

In dieser gibt es einen Bereich der mit Server { eingeleitet wird.  Darin habe ich einen neunen location Bereich eingeleitet.

Wird die Adresse der nas anschließend gefolgt von /homeatic aufgerufen wird  NGINX die Anfrage an die CCU umleiten.

Wesentlich sind die Parameter auth_basic_user_file welcher den Pfad zur zuvor erstellen Passwortdatei enthält, charset um Zeichensatz Probleme mit der API zu lösen und proxy_pass welcher die Adresse der CCU im Lokalen Netzwerk angibt.

Zuletzt muss noch nginx auf der NAS neu gestartet werden. Was dazu der vorgesehene Weg ist habe ich nicht recherchiert. Ich habe ihn einfach gekillt und neu gestartet:

 

Fertig.