Hass.io mit Let’s Encrypt-Zertifikaten auf Synology NAS

Wenn man Home Assistant als Hass.io Community Package (https://community NULL.home-assistant NULL.io/t/hass-io-on-synology-dsm-native-package/125559) auf einem Synology NAS betreibt, ist die Home Assistant Oberfläche erstmal nur ungesichert per HTTP auf Port 8123 erreichbar. Gerade für den Zugriff aus dem Internet ist das natürlich nicht erstrebenswert – HTTPS sollte dabei mindestens zum Einsatz kommen, besser noch ein VPN.

Für die Einrichtung von HTTPS gibt es im Hass.io Add-On Store gleich zwei “official add-ons”: Duck DNS nutzt Let’s Encrypt und verbindet sich dabei direkt mit dem gleichnamigen DynDNS-Dienst, um einen Hostnamen wie z.B. meinha.duckdns.org bereitzustellen. Für die Nutzung mit eigenen Domains ist es jedoch nicht geeignet.

Das Add-On Let’s Encrypt hingegen sollte eigentlich genau das ermöglichen – wenn es dabei nicht ein paar Stolpersteine gäbe, die die Nutzung schlussendlich in den meisten Fällen unmöglich machen. Zur Bestätigung des Domain-Besitzes bietet Let’s Encrypt verschiedene Verfahren, wovon dieses Add-On die Verifizierung per HTTP sowie per DNS anbietet. HTTP erfordert dabei einen Zugriff durch Let’s Encrypt auf eine bestimmte Datei auf Port 80 der Hass.io-Installation bzw. in diesem Fall des NAS, was fehlschlagen muss, weil Port 80 bereits vom DSM selbst verwendet wird. DNS als Verifizierungsmethode hingegen scheitert, weil der Zugriff auf die DNS-Datensätze des Domain-Anbieters dabei per API erfolgen muss und kaum jemand in Deutschland Kunde bei einem der wenigen unterstützen Domain-Anbieter sein dürfte.

Was bleibt? Eine manuelle Einrichtung innerhalb des Home Assistant Docker Containers? Kaum machbar, die Zertifikate laufen jeweils nur 90 Tage und müssen daher regelmäßig ausgetauscht werden. Nach langem Überlegen kam mir dann eine Idee: Die Software des Synology NAS, der Disk Station Manager (kurz: DSM), verfügt bereits über Let’s Encrypt-Unterstützung! Die Zertifikate werden dabei automatisch aktuell gehalten und zum sicheren Aufruf der DSM Weboberfläche verwendet. Was liegt näher, als diese Zertifikate direkt auch für Home Assistant zu verwenden?

Der DSM besteht im Grunde genommen aus einem regulären Linux, welches Synology um die eigenen Funktionen erweitert und über die DSM Weboberfläche administrierbar macht. Das Linux Dateisystem ist zwar eigentlich versteckt, aber über den aktivierbaren SSH-Zugang kann man sich auf dem Hostsystem einloggen und dort als root auch beliebig Schaden anrichten. Nach kurzer Suche habe ich dort den Speicherort der Zertifikate ausfindig machen können: Sie liegen unter /usr/syno/etc/certificate/system/default.

Für die Nutzung mit Home Assistant benötigen wir sie jedoch im Docker-Container namens homeassistant, der seine Daten regulär auf dem NAS ablegt – der Speicherort wird bei der Einrichtung des Hass.io Community Packages ausgewählt. In meinem Falle sollen die Zertifikate im Ordner /volume1/docker/hass.io/ssl landen.

Nur wie kommen sie dort hin? Glücklicherweise bietet der DSM in der Systemsteuerung einen Aufgabenplaner, der auch Shell-Scripte verarbeiten kann. Dort habe ich eine tägliche Aufgabe erstellt, die die Zertifikate ans gewünschte Ziel kopiert, sofern sie dort älter oder nicht vorhanden sind, und anschließend den Docker Container neu startet. Die folgenden Zeilen können direkt als “benutzerdefiniertes Skript” eingefügt werden (Pfade ggf. anpassen!):

SRC="/usr/syno/etc/certificate/system/default"
DEST="/volume1/docker/hass.io/ssl"
if [ ! -f "$DEST/fullchain.pem" ] || [ "$SRC/fullchain.pem" -nt "$DEST/fullchain.pem" ]; then
  cp "$SRC/fullchain.pem" "$DEST/"
  cp "$SRC/privkey.pem" "$DEST/"
  chown root:root "$DEST/fullchain.pem" "$DEST/privkey.pem"
  chmod 600 "$DEST/fullchain.pem" "$DEST/privkey.pem"
  /usr/syno/bin/synowebapi --exec api=SYNO.Docker.Container version=1 method=restart name=homeassistant
fi

Der Neustart des Containers über den synowebapi-Aufruf anstatt via docker restart sorgt dafür, dass sich der DSM nicht über einen unerwartet gestoppten Container beschwert.

Schließlich muss in der Home Assistant Konfiguration noch SSL aktiviert werden. Dies geschieht über einige Konfigurationszeilen in der configuration.yaml:

http:
ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

Das war es schon. Nach dem obligatorischen Home Assistant Neustart sollte die Oberfläche nun ausschließlich via HTTPS erreichbar sein (üblicherweise auf Port 8123).

4 Gedanken zu „Hass.io mit Let’s Encrypt-Zertifikaten auf Synology NAS

  1. Pingback: SSL certificate in Hass.io & Home Assistant Core on Synology – #024 | All about hosting (https://hostic NULL.org/ssl-certificate-in-hass-io-home-assistant-core-on-synology-024/)

  2. Hallo,
    danke für den super Artikel, das spart mir viele Probleme (alle 3 Monate Zertifikat kopieren) und man kommt hier sogar direkt an fullchain ! Das braucht man ja für den HomeAssistant, bisher habe ich cert und chain per Hand zusammenkopiert
    (da Synology beim exportieren die fullchain nicht mit exportiert).

    Jetzt die Frage, wie hast du die Wiederholung für das Script eingestellt? Das Zertifikat wird ja alle 2 Monate Erneuert? Aber weiß man den genauen Tag? Man kann auch bei der Wiederholung nur einstellen “alle 2 Monate” aber sind das genau 60 Tage oder wird das anders gehandhabt?

    mfg

    • Hallo, das Script bzw. die Aufgabe im Aufgabenplaner läuft bei mir täglich um 23:30 Uhr. Das ist kein Problem, weil:

      if [ ! -f "$DEST/fullchain.pem" ] || [ "$SRC/fullchain.pem" -nt "$DEST/fullchain.pem" ]; then

      Die Zeile bedeutet: Wenn am Ziel keine fullchain.pem liegt ODER die fullchain.pem im Ziel älter ist als an der Quelle, dann …

      Somit macht das Script einfach nichts, solange kein neues Zertifikat gefunden wird.

Schreibe einen Kommentar

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