Lets Encrypt Zertifikate über acme.sh

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Hallo zusammen,

ich möchte hier keinen neuen Thread aufmachen, finde aber leider auch nichts, wo es Schritt für Schritt beschrieben steht, wie man das mit der Hetzner DNS Api und den Wildcard Zertifikaten von Let's Encrypt an einer Synology Diskstation mit Docker einrichtet.

Bin nicht fit in den Thema, eher unsicher und brauche bitte eure Hilfe.

Als Grundlage für meine Vorbereitungen/Vorüberlegungen habe ich folgende Anleitungen/Artikel gelesen, die @ctrlaltdelete für mich schon in einem anderen Thread rausgezogen hat:
Link 1 https://edv.mueggelland.de/letsencrypt-wildcard-certificate-mit-acme-sh-und-hetzner-dns/
Link 2 https://community.hetzner.com/tutorials/automating-ssl-certificates-with-acmesh-dns

Zusätzlich hat mir @Benares einen weiteren Artikel rausgezogen, in dem es um acme.sh in Docker geht - allerdings für einen anderen Domain Provider:
Link 3 https://www.christosgeo.com/2022/02/03/renew-lets-encrypt-certificates-on-synology-using-acme-sh/

Ich bringe es nicht so richtig zusammen, was ich genau tun muss und was in der account.conf Datei stehen muss, welche nachfolgenden Befehle ich eingeben muss, etc., um das korrekt und fehlerfrei einzurichten.

Was ich bereits erledigt habe:
1.) Umstellung der Hetzner DNS-Server auf die "Gas"-Nameserver hydrogen/oxygen/nitrogen für alle meine Domains (Siehe Link 1)
2.) Container-Manager installiert und acme.sh als Image in den Containermanager geladen
3.) Ordner /volume1/docker/acme erstellt (siehe Link 3)
4.) Adminuser "acme" ohne weitere Rechte auf Anwendungen oder Ordner erstellt (siehe Link 3)

Ich habe bei Hetzner vier Domains liegen, für mindestens zwei Domains von denen hätte ich gerne Let's Encrypt Wildcard Zertifikate auf einer (DS720+) NAS. Brauche ich zwei Tokens? Oder zwei Docker? Oder wie läuft das mit zwei Domains?

1.) Was muss nun in die Datei /volume1/docker/acme/account.conf für Hetzner aussehen?
2.) acme.sh würde ich in Docker gemäß Anleitung aus Link 3 installieren - oder gibts was zu beachten?
3.) Welche Befehle muss ich dann in der Konsole von Docker ausführen?
4.) Wie kommen die Zertifikate dann in Einstellungen - Sicherheit - Zertifikat
5.) Die Erneuerung würde ich dann gemäß Link 3 als Aufgabe anlegen.

Was hat es mit folgendem Hinweis auf sich, den ich bei Github für acme.sh gefunden habe:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi2#dns_hetzner
The HETZNER_Token settings will be saved in [acme.sh-config-home-path]/account.conf and will be reused when needed. The domain(s) zone_id(s) will be saved in CERT_HOME/[domain]/[domain].conf in order to avoid multiple get_zone_id requests two months later.
Muss ich da was beachten?

Bitte helft mir mal, step by step. Danke euch!
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.178
Punkte für Reaktionen
3.960
Punkte
488
Ich bringe es nicht so richtig zusammen, was ich genau tun muss und was in der account.conf Datei stehen muss, welche nachfolgenden Befehle ich eingeben muss, etc., um das korrekt und fehlerfrei einzurichten.
Ach komm, so schwer ist das nicht.
https://www.christosgeo.com/2022/02/03/renew-lets-encrypt-certificates-on-synology-using-acme-sh/ beschreibt FreeDNS als DNS-Provider, du hast Hetzner

Du musst einfach nur hier lesen und schauen, wie die Variablen bei einem anderen Provider aussehen.
Aus
Code:
export FREEDNS_User="..."
export FREEDNS_Password="..."
wird also einfach
Code:
export HETZNER_Token="<token>"
in der account.conf

und natürlich musst du das Zertifikat
Code:
acme.sh --issue --dns dns_hetzner -d example.com -d *.example.com --server letsencrypt
mit dem passenden Parameter bei "--dns" beziehen.

Ob du bei Hetzner pro Domain einen eigenen Token hast, weiß ich nicht. Fang halt erstmal mit einer deiner Domänen an.
 
Zuletzt bearbeitet:

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
OK, also würde der Inhalt der account.conf wie folgt lauten:

Code:
export HETZNER_Token="Token1234"
export SYNO_Username='acme'
export SYNO_Password='acme-passwort-1234'
export SYNO_Certificate="acme.sh Lets Encrypt"
export SYNO_Scheme="https"
export SYNO_Port="5001"
export SYNO_Hostname="127.0.0.1"

Und wenn ich mehrere Zertifikate benötige, weil es zwei Domains sind, dann wie folgt
Code:
acme.sh --issue --dns dns_hetzner -d senderversteller1.tld -d *.senderversteller1.tld senderversteller2.tld -d *.senderversteller2.tld --server letsencrypt

Oder geht das so nicht mit zwei Domains? Brauche ich zwei Tokens (je einer pro Domain), oder reicht einer für den Zugriff auf die API von Hetzner? - Oder braucht es gar zwei Container?

Den folgenden Befehl
Code:
acme.sh --set-default-ca --server letsencrypt
um Let's Encrypt als Standard für acme.sh zu setzen braucht es nicht?
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Ob du bei Hetzner pro Domain einen eigenen Token hast, weiß ich nicht. Fang halt erstmal mit einer deiner Domänen an.
Ich würde sagen es gibt nur einen Token für alle Domains, wenn ich mir das DNS Interface von Hetzner so ansehe... passt dann der o.g. Befehl (acme.sh -- issue) für mehrere Domains/Zertifikate?

Noch ne doofe Frage: Ich hab noch nicht verstanden, wie die Zertifikate, die man dann bezogen hat, dann in die DSM Einstellungen unter Sicherheit/Zertifikat wandern und dort erneuert werden. Vielleicht hiermit?
Code:
acme.sh --deploy -d senderversteller1.tld senderversteller2.tld --deploy-hook synology_dsm
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Oder muss man eher mehrere Befehle nacheinander absetzen?

Code:
acme.sh --issue --dns dns_hetzner -d senderversteller1.tld -d *.senderversteller1.tld --server letsencrypt
acme.sh --deploy -d senderversteller1.tld --deploy-hook synology_dsm
acme.sh --issue --dns dns_hetzner -d senderversteller2.tld -d *.senderversteller2.tld --server letsencrypt
acme.sh --deploy -d senderversteller2.tld --deploy-hook synology_dsm
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.178
Punkte für Reaktionen
3.960
Punkte
488
Zertifikatsbeschaffung/-Erneuerung und Deploy sind völlig getrennte Dinge. Alles wird über Variablen aus der account.conf gesteuert, die du in eigenen Scripts aber übersteuern kannst.

Hier mal ein Beispiel für einen reinen Deploy an 2 Server
Code:
#!/bin/sh
export DOMAIN=example.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
Wie gesagt, probier's erstmal mit einer Domain/einem Zertifikat und schau dann, wie/wo du die anderen unterbringst.
SYNO_CERTIFICATE adressiert übrigens die Beschreibung des Zertifikats, das ersetzt werden soll, SYNO_HOSTNAME den Namen des Ziel-Servers. SYNO_USERNAME und SYNO_PASSWORD sind bei beiden DSen gleich, stehen in der account.conf und müssen nicht übersteuert werden. Ansonsten müssten sie es.
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
So, die Zertifikatsbeschaffung hat schon einmal funktioniert mit Hetzner. Das macht keine Probleme.
Allerdings habe ich mit dem Deploy ein Problem:
Code:
/ # acme.sh --deploy -d senderversteller.tld --deploy-hook synology_dsm                 
[Thu Feb  6 20:56:39 UTC 2025] The domain 'senderversteller.tld' seems to already have an
 ECC cert, let's use it.                                                         
[Thu Feb  6 20:56:39 UTC 2025] Logging into 127.0.0.1:5000...                   
[Thu Feb  6 20:56:40 UTC 2025] Enforce auth with 2FA-OTP enabled, please configur
e the user to enable 2FA-OTP to continue.                                       
[Thu Feb  6 20:56:40 UTC 2025] Error deploying for domain: senderversteller.tld         
[Thu Feb  6 20:56:40 UTC 2025] Error encountered while deploying.

Der von mir angelegt acme Admin-User hat aber kein 2FA aktiviert. Was mache ich falsch?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.178
Punkte für Reaktionen
3.960
Punkte
488
Nutz mal
Code:
...
export SYNO_USERNAME="deinadminname"
export SYNO_PASSWORD="deinadminpasswort"
export SYNO_SCHEME="http"
export SYNO_PORT="5000"
export SYNO_HOSTNAME="localhost"
...
in der account.conf
Die Variablen kannst du natürlich, wie oben dargestellt, in jedem einzelnen Script überschreiben.

Edit: Das mit der Erzwingung von 2FA verstehe ich nicht.
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Kurze Zwischenfrage:
Gibts eigentlich eine andere Möglichkeit, die Variablen in der account.conf zu ändern und wirksam zu machen - außer jedes Mal den Container und den Inhalt von /volume1/docker/acme zu löschen? Ein einfacher Neustart des Docker Container macht die neuen Variablen in meiner account.conf nicht wirksam.

EDIT:
export SYNO_USERNAME="deinadminname"
export SYNO_PASSWORD="deinadminpasswort"
Du schreibt die Variablen in "..." - in der Beschreibung der Website sowie in manchen Vorpostings sind sie in '...' - macht das einen Unterschied?
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Habe es mit localhost versucht... selbes Resultat.
Habe den Admin-User und das Passwort sowohl in Gänsefüßchen "..." als auch in Anführungsstriche '...' gesetzt.


Code:
/ # acme.sh --deploy -d senderversteller.tld --deploy-hook synology_dsm                 
[Thu Feb  6 21:11:49 UTC 2025] The domain 'senderversteller.tld' seems to already have an
 ECC cert, let's use it.                                                         
[Thu Feb  6 21:11:50 UTC 2025] Logging into localhost:5000...                   
[Thu Feb  6 21:11:51 UTC 2025] Enforce auth with 2FA-OTP enabled, please configur
e the user to enable 2FA-OTP to continue.                                       
[Thu Feb  6 21:11:51 UTC 2025] Error deploying for domain: senderversteller.tld         
[Thu Feb  6 21:11:51 UTC 2025] Error encountered while deploying.
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Problem gefunden:
1738876520621.jpeg
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.178
Punkte für Reaktionen
3.960
Punkte
488
Öhm, bei steht das so drin, also mit "" nicht mit '', aber das dürfte egal sein.
Ich musste den Container nie neu starten, wenn ich was an der account,conf geändert habe. Das sind einfach nur Default-Werte, die in jedem eigenem Script überlagert werden können.
Also doch 2FA für den Account aktiv?
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Man kann unter Einstellungen - Sicherheit - Konto die 2FA für Admins erzwingen. Das hatte ich aktiv... wenn es deaktiviert ist, geht es.

Nächstes Problem... Was bedeutet das?

Code:
/ # acme.sh --deploy -d senderversteller.tld --deploy-hook synology_dsm                 
[Thu Feb  6 21:16:25 UTC 2025] The domain 'senderversteller.tld' seems to already have an
 ECC cert, let's use it.                                                         
[Thu Feb  6 21:16:31 UTC 2025] Logging into localhost:5000...                   
[Thu Feb  6 21:16:36 UTC 2025] Getting certificates in Synology DSM...           
[Thu Feb  6 21:16:37 UTC 2025] Unable to find certificate: acme.sh Lets Encrypt a
nd  is not set.                                                                 
[Thu Feb  6 21:16:37 UTC 2025] Error deploying for domain: senderversteller.tld         
[Thu Feb  6 21:16:37 UTC 2025] Error encountered while deploying.

Das kommt vermutlich aus
export SYNO_Certificate="acme.sh Lets Encrypt"

Muss ich da was eintragen?
Wie gesagt, das Ziel ist irgendwann zwei Domains mit Wildcard zu haben.

Ich musste den Container nie neu starten, wenn ich was an der account,conf geändert habe. Das sind einfach nur Default-Werte, die in jedem eigenem Script überlagert werden können.
Ich kann eine Änderung in account.conf Datei machen, aber irgendwie bekomme ich die nicht "aktiviert". Selbst nach einem Neustart des Containers werden die alten Variablen verwendet. Hab den Container jetzt schon mindestens 8 mal neu installiert, inklusive der Zertifikate... weil wenn ich die nicht lösche, geht es auch nicht 🤷‍♂️
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.178
Punkte für Reaktionen
3.960
Punkte
488
SYNO_Certificate adressiert die Beschreibung des Zertifikats, das ersetzt werden soll, die kannst du bei jedem Zertifikat frei anpassen, also muss SYNO_Certificate identisch sein.

Passt das Volume-Mapping bei dir? Die account.conf liegt unter /volume1/docker/acme und wird im Container unter /acme.sh eingeblendet. Passt das?
1738877823430.png
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Es hat im account.conf folgender Eintrag gefehlt:
export SYNO_Create="1"

Jetzt hab ich das Zertifikat erfolgreich in die Synology eingebunden. Danke für deine Hilfe soweit @Benares
Wie bekomme ich jetzt meine zweite Domain dazu?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
14.178
Punkte für Reaktionen
3.960
Punkte
488
Sorry, da musst du dich erst mal selbst durchwurschteln. Ich muss jetzt in mein Bett :sleep:
 

senderversteller

Benutzer
Mitglied seit
10. Dez 2015
Beiträge
284
Punkte für Reaktionen
62
Punkte
34
Ich habe es jetzt mit zwei verschiedenen parallel laufenden Containern gemacht... falls jemand noch eine elegantere Lösung für zwei Domains einfällt, bitte her damit. Danke!
 


 

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