CCU2: XML-API mit app­fä­higer HTTPS-Authentifizierung (mod_auth)

Ich wurde in meinem Artikel „CCU2: XML-API mit HTTPS-Authentifizierung (mod_auth)“ darauf aufmerksam gemacht, dass Apps wie zum Beispiel Homedroid oder Home24 leider nicht funktionieren. Nach ein wenig Ursachenforschung meine ich den Fehler lokalisiert zu haben.

Die Homematic CCU2 verwendet Lighttpd inklusive mod_auth – dieses mache ich mir zu nutzen um explizit das Plugin „XML-API“ mit einer zusätzlichen HTTP-Authentifizierung zu sichern. Dies Methode ist dennoch nur dann wirklich sicher, wenn das Passwort über eine verschlüsselte Verbindung übertragen wird. Voraussetzung für folgende Schritte:

  • Homematic CCU2 mit Software-Stand 2.11.9 – 2.21.10
  • microSD-Karte die in der CCU2 initialisiert ist
  • SSH-Zugang zur Homematic CCU2 (Einstellung -> Systemsteuerung -> Sicherheit)
  • Plugin „XML-API“ in Version 1.10
  1. Zuerst stellen ich die Verbindung zur Homematic CCU2 her:
    ssh root@192.168.1.5 #an dieser Stelle eure IP der CCU2
  2. Remount des Rootfs als Writeable:
    mount -o remount,rw /
  3. Wechseln auf die SD-Karte
    cd /media/sd-mmcblk0/
  4. Nun erstelle ich einen backup-Ordner:
    mkdir backup
  5. Backup der Standardkonfiguration
    cp /etc/lighttpd/lighttpd* /media/sd-mmcblk0/backup/
  6. Ordnungshalber eine kleine Ordnerstruktur auf der SD-Karte
  7. Erstellen unserer Konfigurationsdatei:

    Inhalt (Zugriff: Intern sowie Extern Passwortgeschützt):

    Inhalt (Zugriff: Extern passwortgeschützt):

    Hier stehen noch weiter Konfigurationsmöglichkeiten zur Verfügung: mehr Details unter: mod_auth
  8. Es fehlt noch die Passwort-Datei:
    vi /media/sd-mmcblk0/etc/lighttpd/.lighttpdpassword
    Jede Zeile ein Benutzer und achtet darauf, dass realm identisch ist.
    Beispiel:
  9. Nun füge ich die erstellte config.conf in die „Serverkonfiguration“ ein.
    Unter cd /etc/lighttpd/ findet man:

    • lighttpd.conf
    • lighttpd_ssl.conf

    Wie man aus den Dateinamen schon erahnen kann ist die eine Datei für die Verbindung ohne SSL zuständig und die andere mit. Grundsätzlich könnte man die Konfiguration z.B. nur in der lighttpd.conf aufrufen, wenn man weiß dass so und so nur über HTTP zugegriffen wird. In diesem Moment könnte man aber über HTTPS nach wie vor ohne zusätzliches Passwort die Inhalte aufrufen. Grundsätzlich empfehle ich generell nur den Zugriff über HTTPS abzuwickeln – trotzdem müssen wir beide Dateien anpassen.

  10. Am Ende beider Dateien inkludiere ich meine Konfiguration:

  11. Zu guter letzt starte ich die Homematic CCU2 über Einstellung -> Systemsteuerung -> Zentralen-Wartung neu!

Nun ist der „XML-API“-Zugriff nur mit HTTP/HTTPS-Authentifizierung möglich!

Hinweis: Man benötigt nicht unbedingt eine SD-Karte. Allerdings sollten mal Software-Updates kommen ist man so auf der sicheren Seite und muss nicht ggf. alles neu schreiben sondern nur die config.conf wieder einfügen.

It's only fair to share...Email this to someoneShare on Facebook0Tweet about this on TwitterShare on Google+0

9 Gedanken zu “CCU2: XML-API mit app­fä­higer HTTPS-Authentifizierung (mod_auth)

  1. Hi, vielen Dank erstmal für die Mühe des Codes und deine Ausführungen.
    Leider funktionieren die Apps trotzdem nicht. Beim Extern nicht aufzurufendem Code muss erwähnt werden, dass psycho0overload nur als Beispiel steht und das hier der eigene DYNDNS Adressteil rein muss… (Hab eine Weile gebraucht um das zu kapieren)
    Die Apps funktionieren nun leider nur im heimischen WLAN oder per VPN aber das ist schonmal eine deutliche Verbesserung. Danke dafür… wenn dir noch etwas einfällt damit es auch mit Authentifizierung aus dem WEB klappt wäre dies toll. Es scheint so zu sein, dass die HTTP Authentifizierung auf Android nicht funktioniert. (Jedenfalls kann ich mich am Heim PC authentifizieren (per Dyndns) aber nicht über Handy… – hier ist es nicht mal möglich aus dem normalen Internetprogramm auf die geschützte HTTP Seite zu kommen. Dies scheint also ein Android Problem zu sein!?
    Eine Lösung hierfür wäre noch toll.

    • Ich werde mich gerne weiter versuchen. Die größte Problematik für mich ist, dass ich kein Android habe 😄 Ich glaube diesmal werde ich doch auf das Gerät eines bekannten zurückgreifen müssen^^

  2. Kleiner Tip am Rande, für alle, bei denen es auch im Browser nicht funktioniert (wie z.B. beim Michael, Post v. 14.07.16 17:58):
    Wenn das Passwordfile unter Windows erstellt wird, bestehen die Zeilenumbrüche aus CR/LF (0D/0A), statt Unix-like nur aus LF (0A). Wenn man sich dann stundenlang einen Wolf gesucht hat, und endlich direkt auf der CCU mit vi rein schaut, steht dort dann „password^M“ statt „password“. Da ist es dann klar, warum die Anmeldung nie geklappt hat, und das log-File vor „(http_auth.c.885) password doesn’t match for …“ nur so strotzt. 🙁

    So, und nun mal schauen, was homedroid dazu sagt!
    René

  3. Aktueller Sachstand:
    Läuft auf 2 S5mini (Stock & CM13) mit plain problemlos.
    Irgendwie dachte (!) ich, das es zwischendurch mit htdigsest auch mal funktioniert hätte, aber das war offenbar ein Irtum, und der lighttpd wahrscheinlich nicht neu gestartet gewesen.

    Da mir allerdings die reine Aussen-Absicherung der HomeDroid-Verzeichnisse zu wenig war, und ich auch den Schutz der Standardseite für zu gering (oder mit sicheren Zugangsdaten zu nervig) fand, habe ich ‚auth.require = ( „/“ =>‘ gesetzt, dies dann aber nur für SSL eingebunden.
    Jetzt ist die CCU intern über 80 offen, und der von der FireWall von außen weitergeleitete 443-Zugang ab „/“ über mod_auth geschützt.
    Sofern ich da jetzt keinen schweren Denkfehler drin habe, sehe ich das als guten Weg zwischen Nutzbarkeit und Sicherheit an.

    Ja, und auf jeden Fall nochmal herzlichsten Dank an Psycho0verload, ohne dessen Grundlagen hier ich, dank völlig fehlenden Unix-Grundkenntnissen (lebe beruflich halt in der Windows-Welt) ich nicht den leisesten Ansatz gehabt hätte, was zu tun sein.
    DANKE !!!

    René

  4. Für die HomeDroid User:

    User und Password der HTTP-Authentication müssen in
    Konfiguration > Experimental Settings > Netzwerkeinstellungen > Enable Http Auth aktiviert und eingegeben werden.

    Dann läuft’s. 😀

    Gruß,
    Oli S.

    P.S.: Danke für die Anleitung, psycho0verload!

  5. Hallo,

    danke für die tolle Anleitung. Läuft im Browser über die externe Adresse auch super. Es kommt die Abfrage und die Nutzerdaten werden anschließend auch akzeptiert und ich komme auf die XML API. Allerdings kommt beim Homedroid immer der Fehler „Unauthorized“. Enable Http Auth ist natürlich eingeschaltet und die Nutzerdaten sind auch hinterlegt.
    Hab HTTPS und HTTP probiert. Gleicher Fehler.
    Hat jemand einen Tip für mich?

    Gruß
    Stefan

  6. Hallo!

    Erstmal danke für die super Anleitung. Scheint erstmal zu funktionieren, da ich nun beim Aufruf der Seite http://[CCU_IP]/config/xmlapi/%5BSkript_Name%5D eine Passwortabfrage bekomme.

    Allerdings habe ich auch das Problem, dass er meinen Account und das Passwort nicht akzeptiert.

    Habe schon mehrere account (klein/Grossschreibung) und Passworter mit und ohne Sonderzeichen versucht.

    Hat jemand noch einen Tipp?

    • Lösung: Hab jetzt auch auf die „Authentication“ in „plain“ umgestellt. Damit geht’s… auch in der Home24 App.

Schreibe einen Kommentar

nineundeighty − 79 =

Kommentare werden moderiert. Es kann etwas dauern, bis dein Kommentar angezeigt wird.