Zertifikat über acme-Challenge

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

mindscout

Benutzer
Registriert
25. Jan. 2014
Beiträge
286
Reaktionspunkte
18
Punkte
18
Hallo,

ich habe acme im Docker laufen, dieses holt erfolgreich ein Zertifikat für eine Domain, ohne dass die NAS selbst mit dem Internet verbunden ist.
Das funktioniert soweit. Auch der acme-Deploy-hook funktioniert und schiebt das neue Zertifikat ins DSM, bzw. aktualisiert es dort (wichtig für Verlängerung).

Soweit so gut, acme funktioniert also wie es soll! Aber trotzdem gibt es ein "Problem", welches ich gerne lösen möchte.
Mich stört an dieser Lösung nämlich der Admin-Zugang, den man für acme anlegen muss.
Mein erster Lösungsansatz sah vor, diesen zu deaktivieren und per Aufgabenplaner nur temporär kurzzeitig für den Zertifikatimport zu aktivieren. Eine viel bessere Lösung wäre es aber, den Zertifikatimport direkt über ein Skript im Aufgabenplaner zu lösen. Zertifikat einmalig manuell importieren und dann automatisch im Hintergrund bei Bedarf aktualisieren - soweit der Plan.
Ich scheitere aber an einem Schritt zur Vorbereitung: für das Skript benötige ich die interne ID des Zertifikates, welches ersetzt werden soll, und ich finde keine Möglichkeit, da ran zu kommen.

Kennt jemand einen funktionierenden ssh-Befehl oder eine Methode, sich die IDs der Zertifikate anzeigen zu lassen?
 
Ich verstehe nicht, wie ein ACME-Renew ohne Internet-Zugang funktionieren soll. Ohne Portfreigaben ja, bei Verwendung von DNS-Challenge.
Lies mal hier.
 
  • Like
Reaktionen: *kw*
Und im github (acme-Wiki) steht doch alles, was man wissen muss. Entscheidend ist der "deployhook" auf die DSM. Insbesondere Stichwort "temp_admin" und der Abschnitt "About the authentication".

Edit: und das ganze muss nur einmal angelegt und bestätigt werden, den Rest macht das acme-script automatisch. Also Prüfung auf Aktualität und rechtzeitige Verlängerung. Da musst du als User nix mehr machen.

Den Rest hat @Benares schon gesagt.
 
  • Like
Reaktionen: Benares
@Benares Vielleicht hatte ich es unglücklich formuliert: man kann die NAS nicht von außerhalb (Internet) direkt erreichen, ohne VPN.

Wenn die NAS direkt über das Internet erreichbar wäre, bräuchte ich ja kein ACME, sondern könnte direkt via. Synology DSM über LetsEncrypt ein Zertifikat erstellen. So gibt mir acme nach dem ersten Start auf Anfrage den CNAME + Code bekannt, welchen ich selbst manuell in der Domainverwaltung hinterlege, damit funktioniert die Prüfung und das offizielle Zertifikat wird ausgestellt.

@*kw* Ja richtig, der Deploy-Hook macht genau das. Aber er benötigt Admin-Zugang. Hier aus dem Wiki:
"For accessing the DSM successfully, the script will require you to provide your admin user credential (username & password), you can do it by exporting them, and for the future automatic execution, the script will save them in your disk (in plaintext)."

Mag zwar open Source sein, aber wer mag schon freiwillig seinen DSM-Admin in die Hände einer Dritt-Anwendung legen, unverschlüsselt und ohne 2FA? Kann man evtl. privat zuhause machen, aber nicht auf einem Produktivsystem, welches evtl. auch mal Sicherheitsaudits überstehen muss.

Notfalls muss ich auf den Komfort eines automatischen Imports verzichten, aber wenn es doch eine Möglichkeit gibt, versuche ich sie umzusetzen.
 
Ach so, du nutzt acme.sh nicht ohne Internet, sondern du nutzt acme.sh mit DNS-Challenge aber ohne DNS-API. Dann zeigt dir acme.sh erstmal Codes, die du in deiner Domain erstmal manuell als TXT-Records anlegen musst, bevor es weitergeht. Für manche DNS-Provider mit DNS-API gibt es ACME-Schnittstellen, die auch das automatisieren. Dann läuft alles vollautomatisch.
Der anschließende Deploy an den lokalen oder andere Web-Server ist nochmal ne ganz andere Geschichte.
 
Ich habe deployhook von meiner OpnSense mehrfach probiert, aber bisher nie Erfolg gehabt. Ich habe es dann irgendwann gelassen. Hatte extra einen separaten Benutzer im DSM angelegt. Aber vermutlich bin ich einfach zu blöd, Zertifikate, welche durch die OpnSense (ACME Plugin) erzeugt werden, an meine DS918+ "auszurollen". 😉

Wenn jemand ein Tipp für mich hat gern. Ansonsten bleibt es halt, wie es ist. Never touch a running system.
 
Mmh, ich mach den Deploy wahlweise über ein getrenntes Script, vielleicht hilft dir der Code weiter.
Code:
#!/bin/sh
export DOMAIN=meinedomain.com
export SYNO_CERTIFICATE="*.$DOMAIN"
echo "Deploying $DOMAIN ..."
export SYNO_HOSTNAME="DS1522"
echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
export SYNO_HOSTNAME="DS415"
echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm

Die restlichen Daten (SYNO_USERNAME, SYNO_USERNAME, SYNO_SCHEME,SYNO_PORT,...) kommen aus der account.conf.
 
  • Like
Reaktionen: Ronny1978
Ich schau mal. Danke für deine Hilfe. 🙋‍♂️
 
Bevor ich alles auf den RasPi geschoben habe, war meine letzt Verfahrensweise auf der DS:

(Recommend) Use an automatically created temp admin user by executing export SYNO_USE_TEMP_ADMIN=1. In this way, you won't need to provide any admin credentials, the deploy script itself will utilize Synology built-in utils to complete authentication, so it designed to only support locally deployment, and can't be used to deploy in docker or deploy remotely.
 
@mindscout Hilft Dir der Inhalt von /usr/syno/etc/www/certificate/system_default/cert.conf?
 
@Hagen2000 Die Pfade habe ich gefunden, aber (mein letzter Stand der Versuche) is, dass es wohl noch nicht reicht die Dateien dort abzulegen. Es sollte ein Synology-internes Tool geben, was den Import von da aus vornimmt. Ich habe es blos in der DSM 7.2.xxx nicht finden können.

@Benares Damit nutzt du aber letztlich auch den acme deploy hook, welcher eigenen Admin Zugang braucht. Und für den braucht man ja auch kein extra Skript in der Aufgabenplanung, da acme diesen automatisch regelmäßig aufruft, wenn man den Befehl ein Mal initial erfolgreich durchlaufen lässt.

@*kw* Muss ich mir morgen mal anschauen, was genau damit gemeint ist.
Ich suche ja nach einer Lösung, welche als root-Skript keine extra Credentials benötigt. Aber eben jene synology utils lassen sich bisher nicht aufrufen.
 
da acme diesen automatisch regelmäßig aufruft
Aber acme.sh merkt sich leider intern nur einen Deploy, den letzten. Und dass man intern nur über http und einen Admin-Account laufen lässt, finde ich persönlich nicht sooo schlimm.
 
Müsste ich mir mal anschauen. Ich verwende acme.sh in Docker auf meinem Haupt-NAS (neilpang/acme.sh). Ich habe damals, beim Einrichten, dazu nichts gefunden. Vielleicht geht es inzwischen.
 
@mindscout Das deploy script (Github) nutzt ja einfach die DSM-Webseite durch passende Aufrufe. DSM-seitig scheint mir das zugehörige CGI kompilierter Code zu sein.
Du musst vielleicht nach dem Überschreiben des Zertifikats einfach den Reload der nginx-Konfiguration auslösen?
 
@Hagen2000 Das hat mir Google Gemini auch so vorgeschlagen, nachdem wir einsehen mussten, keinen Zugriff auf Synology-interne Mechanismen zu bekommen. So ist auch mein letzter Stand gewesen: Zertifikat per Skript in diese default-Ordner kopieren und dann sollte es nach einem Neustart der Dienste aktualisiert werden.

Ich weiß bisher nur noch nicht, ob das tatsächlich funktioniert. Ich habe ein frisches, gültiges Zertifikat (erst-Import über deploy-hook erzwungen). Da so maximal das bereits vorhandene Zertifikat neu importiert werden würde, habe ich keine Rückmeldung darüber, ob das im DSM unter Sicherheit/Zertifikat aktive Zertifikat nun die "neue Kopie" ist oder das Original. Dazu müsste ich den Renew in 60 Tagen abwarten.
 
Das könntest Du doch relativ einfach testen, indem Du selber ein Zertifikat samt Key erstellst (oder irgendwo kopierst) und dieses probeweise importierst. 60 Tage warten kann ja keine Lösung sein. ;)

Und das Endergebnis, nämlich das Deployment auf das NAS per Skript, wäre dann ja auch für andere Leser interessant. Ich könnte mir auch eine Variante vorstellen, bei der das acme.sh-Skript das Zertifikat per SSH auf das NAS pusht und auf dem NAS eine Aufgabe zyklisch läuft, die bei einem aktualisierten Zertifikat automatisch den nginx neu startet bzw. einen Reload von dessen Konfiguration auslöst.
 
Da hast du zwar theoretisch Recht und darüber hab ich auch schon nachgedacht, aber es ist ein Produktivsystem, wenn ich da jetzt Experimente mit anderen Zertifikaten mache, klingelt mein Telefon heiß wegen der Fehlermeldungen bei den Usern.. ;)

Evtl. schaff ich es am WE mal.
 
  • Like
Reaktionen: Tuxnet
@mindscout Kann ich verstehen!

@Adama Die Variante möchte mindscout ja gerade vermeiden.
 

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat