acme.sh mit Strato

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Guten Morgen!

heute komme ich endlich dazu, mich mit dem Thema acme.sh zu beschäftigen.
Ich nutze eine Domain, welche bei Strato gehostet wird.

Damals hat mir @EDvonSchleck eine Anleitung geschrieben:
https://www.synology-forum.de/threa...ern-pruefen-ob-notwendig.125404/#post-1056464

  1. Habe mir ein Konto bei dnyv6 registiert
  2. Hier meine Strato Domain hinterlegt mit dem Record A Eintrag _acme-challange.meineDomain.de:
    Bildschirmfoto 2023-06-19 um 09.38.18.png

  3. Dann bin ich bei Strato in die Domainverwaltung für meineDomain.de gegangen und dort auf die CNAME Einstellungen:

    Bildschirmfoto 2023-06-19 um 09.38.12.png
    Wert: _acme-challange.meineDomain.de.


  4. acme.sh Docker Container läuft auch bereits. Hier habe ich nun die folgenden zwei Befehle abgesetzt:
  5. acme.sh --set-default-ca --server letsencrypt
  6. acme.sh --issue -d meineDomain.de -d *.meineDomain.de --challenge-alias _acme-challenge.meineDomain.de --dns dns_dynv6 --dnssleep 300
    (meineDomain.de habe ich natürlich meiner Domain entsprechend angepasst)

    Ausgabe wie folgt:


  7. Code:
    Using CA: https://acme-v02.api.letsencrypt.org/directory                                                                           
    Multi domain='DNS:meinDomain.de,DNS:*.meinDomain.de'                                                                         
    Getting domain auth token for each domain         
    Getting webroot for domain='meinDomain.de'     
    Getting webroot for domain='*.meinDomain.de'   
    Adding txt value: XXX for domain:  _acme-challenge._acme-challenge.meinDomain.de       
    Using dynv6 api                                   
    {"name": "_acme-challenge._acme-challenge", "data": "XXX", "type": "TXT"}                                                 
    Successfully added record                         
    The txt record is added: Success.                 
    Sleep 300 seconds for the txt records to take effect                                                                               
    Verifying: meinDomain.de                       
    Pending, The CA is processing your order, please just wait. (1/30)                                                                 
    meinDomain.de:Verify error:DNS problem: SERVFAIL looking up TXT for _acme-challenge.meinDomain.de - the domain's nameservers may be malfunctioning           Removing DNS records.                             
    Removing txt: XXX for domain: _acme-challenge._acme-challenge.meinDomain.de             
    Using dynv6 API
    Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 3                                               
    error zones/3798676/records/XXX                                                                       
    Successfully deleted record                       
    Removed: Success                                 
    Removing txt: XXX for domain: _acme-challenge._acme-challenge.meinDomain.de             
    Using dynv6 API                                   
    Successfully deleted record                       
    Removed: Success                                 
    Please add '--debug' or '--log' to check more details.                                                                             
    See: https://github.com/acmesh-official/acme.sh/wiki/How-to-debug-acme.sh

  8. Danach sieht es bei dnyv6 so aus:

    Bildschirmfoto 2023-06-19 um 09.50.51.png
    Der TXT Record sieht für mich nicht richtig aus, oder?

Kann mir jemand sagen, welchen Fehler ich hier gemacht habe?
Danke!
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.320
Punkte für Reaktionen
2.871
Punkte
423
Mit dem DNS-Alias-Mode bist du schon auf dem richtigen Weg, da Strato keine DNS-API bietet.
Vermutlich hast du aber noch einen kleinen Fehler drin. Geh das hier (noch?)mal Schritt für Schritt durch und vergleiche es mit deiner Konfiguration.

Edit: Da ist irgendwo ein _acme-challenge zu viel. Du siehst im Log, dass da wohl ein TXT-Record _acme-challenge._acme-challenge.meinDomain.de gesetzt, aber später nach _acme-challenge.meinDomain.de gesucht wird.
 
Zuletzt bearbeitet:

King3R

Benutzer
Mitglied seit
14. Mrz 2017
Beiträge
356
Punkte für Reaktionen
81
Punkte
28
Die Auflistung deiner abgearbeiteten Schritte ist leider ein wenig undurchsichtig. Ist es wirklich so, dass du überall deine Strato-Domain eingebunden hast? Das ist mMn nämlich nicht korrekt. Aus diesem Grund kommt es wahrscheinlich auch zu den Fehlern mit dem doppelten TXT-Record _acme-challenge.
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Ja, sieht nicht ok aus.
Du schreibst überall nur von meineDomain, nirgends von NS Einträgen oder von der dynv6 Adresse…
Man kann nicht bei verschiedenen Diensten überall DNS Einträge vornehmen ohne zu
definieren welcher Nameserver für welchen Teil der Zone (example.com) zuständig ist.
An die Anleitung hast du dich somit nicht gehalten, weil Ed explizit dynv6 Adressen verwendet hat.

Persönlich verwende ich --domain-alias, dann geht es mit CNAME alleine und man muss nicht die Domain auf 2 Dienste "verteilen".
Aber der --Challenge-alias funktioniert auch wenn man sich wirklich an die Vorgaben hält.

CNAME
_acme-challenge.example.com => alias.dynv6.de

docker exec acme.sh --issue --dns dns_dynv6 --domain-alias alias.dynv6.de -d *.example.com
 
Zuletzt bearbeitet:

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
ich vermute auch, das ich einen Fehler gemacht habe. Bin lediglich auf der Suche, an welcher Stelle
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Okay, einen Fehler habe ich bereits gefunden.
Der Befehl muss lauten:

acme.sh --issue -d meineStratoDomain.de -d *.meineStratoDomain.de --challenge-alias meineDnyv6Domain.net --dns dns_dynv6 --dnssleep 300
 

King3R

Benutzer
Mitglied seit
14. Mrz 2017
Beiträge
356
Punkte für Reaktionen
81
Punkte
28
Im Prinzip musste du nur zwei Sachen anlegen:
  1. A-Record bei dynv6 (z. B. _acme-challenge.dynv6-domain.net)
  2. CNAME-Record bei Strato (z. B. _acme-challenge.strato-domain.de auf _acme-challenge.dynv6-domain.net)
Okay, einen Fehler habe ich bereits gefunden.
Hat es denn jetzt funktioniert?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.320
Punkte für Reaktionen
2.871
Punkte
423
Bracht man den A-Record (1.) wirklich? In der Original-Beschreibung zum DMS-Alias-Mode steht davon nichts. Es wird doch zu Laufzeit ein TXT-Record _acme-challenge.dynv6-domain.net erzeugt (und wieder entfernt) auf den CNAME (2.) zeigt.
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
den A-Record habe ich auch noch nicht verstanden.
Während des Prozess werden 2 TXT Records erzeugt, welche anschließend wieder gelöscht werden.
der A-Record bleibt unberührt.

Gehe einfach mal davon aus, dass alles geklappt hat. Zumindest ist der Vorgang ohne Error durchgelaufen.

Jetzt wollte ich den letzte Schritt machen. Das Zertifikat für die Syno bereitstellen:


Code:
acme.sh --deploy -d meineStratoDomain.de --deploy-hook synology_dsm           
The domain 'meineStratoDomain.de' seems to have a ECC cert already, lets use ecc cert.                                                                                   
Logging into localhost:5108                                                               
Unable to authenticate to localhost:5108 using https.                                                                           
Check your username and password. If two-factor authentication is enabled for the user, set SYNO_TOTP_SECRET.                                                   Error deploy for domain:meineStratoDomain.de       
Deploy error.

Aber Login scheint nicht zu funktionieren.
Die Zugangsdaten sind korrekt, ebenso Port 5108 für den DSM Login via https.
2FA ist nicht aktiv für den User

meine account.conf sieht so aus:

export DYNV6_TOKEN="MEIN_TOKEN"
export SYNO_Username="SYNO_USER"
export SYNO_Password="SYNO_PASSWORT"
export SYNO_Scheme="https"
export SYNO_Port="5108"
AUTO_UPGRADE='1'
DEFAULT_ACME_SERVER='https://acme-v02.api.letsencrypt.org/directory'
 

King3R

Benutzer
Mitglied seit
14. Mrz 2017
Beiträge
356
Punkte für Reaktionen
81
Punkte
28
Da ich dynv6 nicht nutze, kann ich nur raten. Ich denke aber du hast Recht @Benares. Den A-Record braucht man glaub ich nicht. Dieser wird ja, wie du schon schreibst, automatisch angelegt. Wenn er vorher angelegt wird, kann es dann natürlich zu dem doppelten _acme-challenge kommen.

Daher sollte das eigentlich ausreichen:
CNAME-Record bei Strato (z. B. _acme-challenge.strato-domain.de auf _acme-challenge.dynv6-domain.net)
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Okay - es hat geklappt!
Habe den Befehl:


Code:
acme.sh --deploy -d meineStratoDomain.de --deploy-hook synology_dsm

Mit dem Paramater --insecure ergänzen müssen


Code:
acme.sh --deploy --insecure -d meineStratoDomain.de --deploy-hook synology_dsm
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Jetzt noch eine abschließende Frage bezüglich der CNAME Konfiguration:

Wenn ich den Eintrag für meineStrato.Domain setze, kann ich danach noch über ganz normal (wie jetzt auch) meine Webseite erreichen, Mails empfangen, usw?

Oder muss ich diese CNAME Konfigruationen bei jeder subdomain.meineStratoDomain.de machen, statt bei meineStratoDomain.de ?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.320
Punkte für Reaktionen
2.871
Punkte
423
Oder muss ich diese CNAME Konfigruationen bei jeder subdomain.meineStratoDomain.de machen
Nein, wenn du ein Wildcard-Zertifikat erstellst, also z.B. "acme.sh --issue -d meineDomain.de -d *.meineDomain.de ..." gilt dieses auch für alle Subdomains und du brauchst nur einen CNAME.
 
  • Like
Reaktionen: Ghost108

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Kann schon mal die Info sagen, dass der A-Record bei dynv6 benötigt wird.
Hatte eben noch mal einen Test gemacht ohne den A-Record - hier läuft der Prozess dann auf einen Fehler.

Nun hat auch alles im Live System geklappt!
Noch mal vielen Dank für eure Unterstützung!!

Abschließend noch ein paar Fragen meinerseits, für den Feinschliff:

1. Ich musste eine account.conf Datei erstellen, welche im Klartext die Syno User Daten enthält:
export SYNO_Username='MeinSynoUser'
export SYNO_Password='MeinSynouserPasswort'
Das muss so bleiben? Oder gibt es hier noch eine "bessere Variante"?

2. Welche Rechte braucht der User wirklich? Habe jetzt zum Testen einen User erstellt in der Admingruppe. Kann man den noch etwas mehr "kastrieren"?

3. Wie sieht es nun mit der automatischen Verlängerung aus? Muss ich hierfür noch ein Script täglich laufen lassen o.ä.?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.320
Punkte für Reaktionen
2.871
Punkte
423
Das steht doch alles in der Doku (Wiki) von acme.sh. Da kannst du rechts den Baum aufklappen und mit Strg-F nach was suchen. Dann findest du hier z.B.
Code:
...
export SYNO_Username="DSM_Admin_Username"
export SYNO_Password="DSM_Admin_Password"
...
dass es ein Admin-User mit seinem Passwort sein muss.

Und hier findest du die Info, dass das renew automatisch erfolgt, wenn acme.sh als Docker-Image läuft.
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Man kann den Benutzer aber einschränken. Ich habe einen 2FA gesicherten admin und habe ihm keine Anwendung erlaubt, nicht mal DSM. Zum Einkippen der Zertifikate reicht das.

Bei mir läuft der Container zwar als Daemon, aber die automatische Erneuerung hat nicht funktioniert.
Eventuell, weil in der account.conf nur das nötigste steht. Der Rest ist in den Unterverzeichnissen (5 Synos, 4 Standorte, 7 Zertifikate (ecc, teils noch rsa) und teilweise Depot auf mehrere Ziele).
Teil wollte er auch das Zertifikat nicht finden, erst als ich den Hash (den er sich beim letzten deploy dort automatisch ersetzt hatte) im SYNO_certificate wieder durch die Klartext Beschreibung ersetzt hatte ging’s wieder.
Werde ich dann nach und nach in ein Script packen.

p.s. Hyper Backup Vault kann z.B. nur rsa keys (Stand 05/2023).
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.320
Punkte für Reaktionen
2.871
Punkte
423
Meiner Erfahrung nach, merkt sich die Automatik des Scriptes nur einen Deploy, den letzten (s $DOMAIN/$DOMAIN.conf als SAVED_SYNO_...). Will man zu mehreren Zielen deployen, muss man wieder scripten.
Mit SYNO_certificate, gesetzt auf die Beschreibung des Zielzertifikates, kann man beim Deploy festlegen, welches Zertifikat auf dem Ziel ersetzt wird, wenn es dort mehrere gibt.
 


 

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