Synology Let’s Encrypt DNS-Challenge mit IPv64

SSL-Zertifikate?

Secure Socket Layer (SSL)-Zertifikate sind das, was dein Browser verwendet, um eine Website sicher zu kontaktieren und Benutzernamen, Passwörter, Kreditkartendaten usw. zu schützen. Auf den Synology-Geräten ist standardmäßig ein „self-signed“ Zertifikat installiert. Diese bieten zwar Sicherheit, aber der Webbrowser beschwert sich darüber und man muss verschiedene Schaltflächen/Links anklicken, um zur Website zu gelangen. Fragt man nahezu jeden Enterprise-Administrator nach dieser Unannehmlichkeit, sind selbstsignierte SSL-Zertifikate ein alter Hut – sie finden sich in zahlreichen Administrations-Tools. Für einen Endnutzer wirkt es jedoch nicht sonderlich vertrauenserweckend, wenn er Fehlermeldungen wegklicken muss, um auf ein System zuzugreifen, das wichtige und potenziell sensible Daten enthält.

Es GIBT zwar eine eingebaute Methode, ein gültiges SSL-Zertifikat auf einem Synology-Gerät zu bekommen, doch sie hat einen entscheidenden Nachteil: Dein Synology-Gerät muss dafür auf den Ports 80 und 443 über das öffentliche Internet erreichbar sein ODER du musst den Synology-DDNS-Service nutzen. Für manche Nutzer ist das vielleicht kein großes Problem, aber ich glaube nicht, dass die Mehrheit ihr Synology-Gerät öffentlich zugänglich machen oder eine merkwürdige URL (z. B. DeviceName.synology.me) verwenden möchte, um auf die Daten zuzugreifen.

Synology DS223 – Amazon-Link

Die Lösung?

Let’s Encrypt stellt kostenlose SSL-Zertifikate zur Verfügung, und acmesh (https://github.com/acmesh-official/acme.sh) bietet ein Skript, das genutzt werden kann, ohne dass Port 80 und 443 für das öffentliche Internet offen sind.

Wo ist der Haken?

Nun ja, ein bisschen gibt es da schon. Du brauchst eine Domain bei einem Registrar, der eine Programmierschnittstelle (API) bereitstellt, um bestimmte Einträge zu aktualisieren. acme.sh unterstützt auch https://IPv64.net – yay! Andere Anbieter sollten ebenfalls problemlos funktionieren, und das meiste in diesem Beitrag sollte auch für sie passen. Getestet habe ich allerdings nur mit IPv64. Deine Ergebnisse können variieren („YMMV“).

Wo fängt man an?

Als Erstes: Stell sicher, dass du einen Domainnamen bei deinem bevorzugten Registrar oder DynDNS-Anbieter (IPv64 in meinem Fall) registriert hast und beschaffe dir den API-Key. Bei IPv64 kannst du dir den API-Key in deiner Domainübersicht (für die Domain zu der das Zertifikat dann erstellt werden soll) besorgen, er steht auf der rechten Seite und kann dort kopiert werden. Sobald du den API-Key hast, kann es losgehen!

Erstelle einen Benutzer in Synology DSM

Melde dich bei deinem Synology-Gerät an, klicke auf „Systemsteuerung“ und dann auf „Benutzer und Gruppe“. Klicke auf „Erstellen“. Ich habe den Benutzernamen „certadmin“ gewählt und eine entsprechende Beschreibung hinzugefügt. Der Benutzer muss Mitglied der Gruppe „administrators“ sein (das ist erforderlich für den SSH-Zugriff, den wir gleich nutzen werden) und außerdem in der Gruppe „http“ (das ist nötig, damit sich der Prozess im SSH-Session-Kontext bei DSM authentifizieren kann). Der Benutzer „certadmin“ benötigt nur Lese-/Schreibzugriff auf den Ordner „homes“ und du kannst den Zugriff auf alle Anwendungen verweigern. Wenn du den Benutzer erstellt hast, gehe zurück zur „Systemsteuerung“, klicke auf „Terminal & SNMP“ und setze ein Häkchen bei „SSH-Dienst aktivieren“. Klicke auf „Übernehmen“.

Jetzt wird’s spannend!

Wahrscheinlich bist du hier, um eine Anleitung zu bekommen und nicht, um meine ganzen Erklärungen zu lesen – also los!

Verwende einen SSH-Client (z. B. https://www.putty.org für Windows; unter Linux ist SSH standardmäßig verfügbar). Wenn du Putty nutzt, gib dort die IP-Adresse oder den Hostnamen deines Synology-Geräts ein, wähle SSH und klicke auf „Open“. Es erscheint eine Sicherheitswarnung, die du mit „Yes“ bestätigen kannst. Anschließend wirst du nach dem Benutzernamen gefragt („certadmin“ in meinem Fall). Unter macOS oder Linux öffnest du ein Terminal und gibst Folgendes ein:

ssh certadmin@DEINHOSTODERIPADRESSE

Wenn du die Sicherheitswarnung bestätigst, wirst du nach deinem Passwort gefragt. Gib das Passwort ein, das du oben für den Synology-Benutzer festgelegt hast (bei der Eingabe erscheint möglicherweise kein Text) und drücke Enter. Lass dich nicht von der SSH-Sitzung abschrecken – die Kommandozeile ist dein Freund!

Die folgenden Befehle (kopiere sie nacheinander, wenn du möchtest) laden das Skript herunter, entpacken die ZIP-Datei, verschieben die Dateien in einen anderen Ordner, übertragen den Besitz der Dateien an den neuen Benutzer und wechseln in das richtige Verzeichnis. Jeder dieser Befehle sollte in einer einzelnen Zeile ausgeführt werden. Die meisten Befehle stammen aus https://www.driscocity.com/synology-dsm-6-2-lets-encrypt-dns-challenge-route53/.

wget -O /tmp/acme.sh.zip https://github.com/acmesh-official/acme.sh/archive/master.zip
(==> da ist kein Zeilenumbruch, die Zeile wurde nur zu lang)

sudo 7z x -o/usr/local/share /tmp/acme.sh.zip

sudo mv /usr/local/share/acme.sh-master/ /usr/local/share/acme.sh

sudo chown -R certadmin /usr/local/share/acme.sh/

cd /usr/local/share/acme.sh

Nun haben wir die notwendigen Dateien. Jetzt müssen wir ein paar Variablen anlegen, damit das Skript funktioniert. Ersetze die Platzhalter unbedingt durch deine eigenen Informationen!

export IPv64_Token="DEIN_GODADDY_KEY"
export SYNO_Username="certadmin"
export SYNO_Password="DEIN_CERTADMIN_PASSWORT"
export SYNO_Certificate="Let's Encrypt"
export SYNO_Create=1

Wenn du nicht IPv64 als Domain-Registrar/DynDNS-Provider verwendest, kannst du unter
https://github.com/acmesh-official/acme.sh/wiki/dnsapi nach den entsprechenden export-Befehlen für andere Registrare schauen.

Verwende zum Erstellen des ersten Zertifikats folgenden Befehl. Achte darauf, deinen Domainnamen zu ersetzen!

./acme.sh --server letsencrypt --issue -d "*.DEINEDOMAIN.NAME" --dns dns_ipv64 --home $PWD
(==> auch hier: kein Zeilenumbruch!)

Wenn du einen anderen Registrar verwendest, musst du in der oben genannten Github-Dokumentation nachlesen, welchen Wert du für --dns benötigst.

Der Vorgang dauert ca. eine Minute. Keine Sorge: Auf dem Bildschirm siehst du Ausgaben, die den Fortschritt zeigen. Dieser Prozess erstellt und lädt das Zertifikat zwar auf dein Synology-Gerät, sagt diesem aber noch nicht, dass es verwendet werden soll. Das erledigt folgender Befehl:

./acme.sh -d "*.DEINEDOMAIN.NAME" --deploy --deploy-hook synology_dsm --home $PWD
(==> auch hier: kein Zeilenumbruch!)

Du solltest einige Meldungen sehen, die anzeigen, dass sich das Skript erfolgreich bei deinem Synology-Gerät anmelden konnte, die Zertifikate abruft, sie anwendet und den Webserver neu startet.

Das automatische zuweisen der Zertifikate und der Neustart des HTTP-Servers hat bei mir nicht geklappt, ich musste die Zertifikate manuell im DSM zuordnen. Dazu klickst du in der Systemsteuerung auf „Sicherheit“ und dann „Zertifikat“. Dann klickst du auf die Schaltfläche Einstellungen und ordnest dein neues Zertifikat für alle Dienste zu. Beim klicken auf ok werden die Dienste neu gestartet und das neue Zertifikat ist aktiv.

Wenn du dich jetzt per HTTPS bei deinem Synology anmeldest, solltest du ein gültiges Zertifikat sehen!

Wenn du ein gültiges und funktionierendes SSL-Zertifikat hast, stelle sicher, dass deine Browser es verwenden! Melde dich bei deinem Synology-Gerät an, gehe in die Systemsteuerung und rufe „Anmeldeportal“ auf. Setze ein Häkchen bei „HTTP-Verbindungen automatisch zu HTTPS umleiten“ und klicke auf „Speichern“. Sobald alles nach Wunsch funktioniert, gehe wieder zur Systemsteuerung und deaktiviere unter „Terminal & SNMP“ den SSH-Zugriff. Denk dran: Das Deaktivieren unnötiger Dienste ist ein guter Sicherheitsgrundsatz!

Und was kommt jetzt?

Das Zertifikat ist installiert und funktioniert. Wenn du allerdings prüfst, wirst du feststellen, dass es nur 90 Tage gültig ist. Du kannst es ganz einfach automatisch verlängern, indem du in deinem Synology-Gerät in die Systemsteuerung gehst, den „Aufgabenplaner“ öffnest, auf „Erstellen“ und „Geplante Aufgabe“ klickst und „Benutzerdefiniertes Skript“ auswählst. Gib der Aufgabe einen aussagekräftigen Namen und achte darauf, dass als Benutzer „certadmin“ ausgewählt ist. Plane die Aufgabe so, dass sie täglich ausgeführt wird, und trage im Reiter „Aufgabeneinstellungen“ das benutzerdefinierte Skript ein. In meinem Fall sieht das so aus:

/usr/local/share/acme.sh/acme.sh --renew -d "*.DEINEDOMAIN.NAME" --home /usr/local/share/acme.sh --server letsencrypt
(==> auch hier: kein Zeilenumbruch!)

Das war’s!

Nur ein paar relativ einfache Schritte, und du hast ein gültiges SSL-Zertifikat auf deinem Synology-Gerät, das sich automatisch verlängert, bevor es abläuft.

Quellenangabe

Anleitung gefunden auf:
https://dr-b.io/post/Synology-DSM-7-with-Lets-Encrypt-and-DNS-Challenge

Angepasst für IPv64 und ein wenig bereinigt.