acme.sh - automatische Verlängerung des Zertifikats

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Hallo zusammen,

ich habe acme.sh als Docker Container laufen.
Allerdings bin ich etwas verunsichert was die automatische Verlängerung angeht.
Eigentlich hieß es doch, dass der Container die Verlängerung auto. durchführt (sehe auch in den Logs, das der jeden Tag das Zertifikat prüft und überspringt, da noch nicht abgelaufen). Deswegen würde ich vermuten das es automatisch verlängern würde.

ABER, jetzt lese ich mir das acme wiki durch:
https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide#configuring-certificate-renewal

und hier ist die Rede von einem Task, den ich dafür erstellen muss.
Welche Version stimmt denn nun?
 

ctrlaltdelete

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
30. Dez 2012
Beiträge
10.104
Punkte für Reaktionen
3.644
Punkte
414
Nein, kein Task notwendig.
edit: Bei mir war renew am 5.11. fällig, hat einwandfrei funktioniert!
Edit2: er verlängert 1 Monat vor Ablauf.
 
  • Like
Reaktionen: Ghost108

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
... ausser man will das Zertifikat zu mehren Zielen deployen, da sich acme.sh selbst nur einen Deploy merkt (den letzten)

Ich hab mir dafür noch einen Task erstellt, der docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh einmal die Woche zusätzlich aufruft. In acme_renew.sh steht dann alles drin, was ich noch so brauche.
 
  • Like
Reaktionen: ctrlaltdelete

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Das steht doch im Log, wie lange er die Erneuerung noch überspringt. Der interne Task für die Verlängerung läuft täglich, tut i.d.R. aber nichts.
Im Log steht dann "Skip, Next renewal time is: ..."
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Automtische Verlängerung hat nicht wirklich geklappt und ich kann es mir nicht erklären.
Prozess wurde gestartet und das Cert konnt erfolgreich abgerufen werden. Allerdings hat das deployment nicht funktioniert, da es angeblich Problem beim Login gab, um das Cert bereitzustellen. Hier mal die Logs:

2023/11/15 15:23:23 stdout [Wed Nov 15 14:23:23 UTC 2023] ===End cron===
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] Error renew meineDomain.de.
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] Deploy error.
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] Error deploy for domain:meineDomain.de
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] If two-factor authentication is enabled for the user, set SYNO_Device_ID.
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] Unable to authenticate to https://localhost:5108 - check your username & password.
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 60
2023/11/15 15:23:23 stdout [Wed Nov 15 14:23:23 UTC 2023] Logging into localhost:5108
2023/11/15 15:23:23 stderr [Wed Nov 15 14:23:23 UTC 2023] Please refer to https://curl.haxx.se/libcurl/c/libcurl-errors.html for error code: 60
2023/11/15 15:23:22 stdout [Wed Nov 15 14:23:22 UTC 2023] And the full chain certs is there: /acme.sh/meineDomain.de/fullchain.cer
2023/11/15 15:23:22 stdout [Wed Nov 15 14:23:22 UTC 2023] The intermediate CA cert is in: /acme.sh/meineDomain.de/ca.cer
2023/11/15 15:23:22 stdout [Wed Nov 15 14:23:22 UTC 2023] Your cert key is in: /acme.sh/meineDomain.de/meineDomain.de.key
2023/11/15 15:23:22 stdout [Wed Nov 15 14:23:22 UTC 2023] Your cert is in: /acme.sh/meineDomain.de/meineDomain.de.cer
2023/11/15 15:23:22 stdout -----END CERTIFICATE-----
XXX
2023/11/15 15:23:22 stdout -----BEGIN CERTIFICATE-----
2023/11/15 15:23:22 stdout [Wed Nov 15 14:23:22 UTC 2023] Cert success.
2023/11/15 15:23:21 stdout [Wed Nov 15 14:23:21 UTC 2023] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/0414ded94682ecf048a6250b43ec24fdd1b0'
2023/11/15 15:23:21 stdout [Wed Nov 15 14:23:21 UTC 2023] Downloading cert.
2023/11/15 15:23:20 stdout [Wed Nov 15 14:23:20 UTC 2023] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/1314185116/222388982496'
2023/11/15 15:23:20 stdout [Wed Nov 15 14:23:20 UTC 2023] Lets finalize the order.
2023/11/15 15:23:20 stdout [Wed Nov 15 14:23:20 UTC 2023] Verify finished, start to sign.
2023/11/15 15:23:20 stdout [Wed Nov 15 14:23:20 UTC 2023] Removed: Success
2023/11/15 15:23:20 stdout [Wed Nov 15 14:23:20 UTC 2023] Successfully deleted record
2023/11/15 15:23:19 stdout [Wed Nov 15 14:23:19 UTC 2023] Using dynv6 API
2023/11/15 15:23:19 stdout [Wed Nov 15 14:23:19 UTC 2023] Removing txt: XXX for domain: _acme-challenge.myDDNS.dynv6.net
2023/11/15 15:23:19 stdout [Wed Nov 15 14:23:19 UTC 2023] Removed: Success
2023/11/15 15:23:19 stdout [Wed Nov 15 14:23:19 UTC 2023] Successfully deleted record
2023/11/15 15:23:17 stdout [Wed Nov 15 14:23:17 UTC 2023] Using dynv6 API
2023/11/15 15:23:17 stdout [Wed Nov 15 14:23:17 UTC 2023] Removing txt: XXX for domain: _acme-challenge.myDDNS.dynv6.net
2023/11/15 15:23:17 stdout [Wed Nov 15 14:23:17 UTC 2023] Removing DNS records.
2023/11/15 15:23:17 stdout [Wed Nov 15 14:23:17 UTC 2023] Success
2023/11/15 15:23:15 stdout [Wed Nov 15 14:23:15 UTC 2023] Pending, The CA is processing your order, please just wait. (1/30)
2023/11/15 15:23:14 stdout [Wed Nov 15 14:23:14 UTC 2023] Verifying: *.meineDomain.de
2023/11/15 15:23:14 stdout [Wed Nov 15 14:23:14 UTC 2023] Success
2023/11/15 15:23:11 stdout [Wed Nov 15 14:23:11 UTC 2023] Pending, The CA is processing your order, please just wait. (1/30)
2023/11/15 15:23:11 stdout [Wed Nov 15 14:23:11 UTC 2023] Verifying: meineDomain.de
2023/11/15 15:18:10 stdout [Wed Nov 15 14:18:10 UTC 2023] Sleep 300 seconds for the txt records to take effect
2023/11/15 15:18:10 stdout [Wed Nov 15 14:18:10 UTC 2023] The txt record is added: Success.
2023/11/15 15:18:10 stdout [Wed Nov 15 14:18:10 UTC 2023] Successfully added record
2023/11/15 15:18:09 stdout {"name": "_acme-challenge", "data": "XXX", "type": "TXT"}
2023/11/15 15:18:08 stdout [Wed Nov 15 14:18:08 UTC 2023] Using dynv6 api
2023/11/15 15:18:08 stdout [Wed Nov 15 14:18:08 UTC 2023] Adding txt value: XXX for domain: _acme-challenge.myDDNS.dynv6.net
2023/11/15 15:18:08 stdout [Wed Nov 15 14:18:08 UTC 2023] The txt record is added: Success.
2023/11/15 15:18:08 stdout [Wed Nov 15 14:18:08 UTC 2023] Successfully added record
2023/11/15 15:18:08 stdout {"name": "_acme-challenge", "data": "XXX", "type": "TXT"}
2023/11/15 15:18:07 stdout [Wed Nov 15 14:18:07 UTC 2023] Using dynv6 api
2023/11/15 15:18:07 stdout [Wed Nov 15 14:18:07 UTC 2023] Adding txt value: XXX for domain: _acme-challenge.myDDNS.dynv6.net
2023/11/15 15:18:06 stdout [Wed Nov 15 14:18:06 UTC 2023] Getting webroot for domain='*.meineDomain.de'
2023/11/15 15:18:06 stdout [Wed Nov 15 14:18:06 UTC 2023] Getting webroot for domain='meineDomain.de'
2023/11/15 15:18:03 stdout [Wed Nov 15 14:18:03 UTC 2023] Getting domain auth token for each domain
2023/11/15 15:18:03 stdout [Wed Nov 15 14:18:03 UTC 2023] Multi domain='DNS:meineDomain.de,DNS:*.meineDomain.de'
2023/11/15 15:18:03 stdout [Wed Nov 15 14:18:03 UTC 2023] Using CA: https://acme-v02.api.letsencrypt.org/directory
2023/11/15 15:18:02 stdout [Wed Nov 15 14:18:02 UTC 2023] Renew to Le_API=https://acme-v02.api.letsencrypt.org/directory
2023/11/15 15:18:02 stdout [Wed Nov 15 14:18:02 UTC 2023] Renew: 'meineDomain.de'
2023/11/15 15:18:02 stdout [Wed Nov 15 14:18:02 UTC 2023] Auto upgraded to: 3.0.7
2023/11/15 15:18:02 stdout [Wed Nov 15 14:18:02 UTC 2023] Upgrade success!
2023/11/15 15:18:02 stdout [Wed Nov 15 14:18:02 UTC 2023] Already uptodate!
2023/11/15 15:18:01 stdout [Wed Nov 15 14:18:01 UTC 2023] ===Starting cron===

2FA ist nicht aktiviert. Habe testweise https://IP_DER_SYNO:5108 aufgerufen. Es erscheint der DSM Login.
Dort habe ich mich mit Username und Passwort erfolgreich anmelden können, welche in der account.conf für acme hinterlegt sind.
Somit können die Zugangsdaten nicht das Problem sein. Der Witz an der ganzen Sache: Wenn ich das deployment manuell starte, sprich über das Terminal des Containers, klappt es tadellos:


acme.sh --deploy --insecure -d meineDomain.de --deploy-hook synology_dsm
[Thu Nov 16 08:31:08 UTC 2023] Logging into localhost:5108
[Thu Nov 16 08:31:09 UTC 2023] Getting certificates in Synology DSM
[Thu Nov 16 08:31:09 UTC 2023] Generate form POST request
[Thu Nov 16 08:31:09 UTC 2023] Upload certificate to the Synology DSM
[Thu Nov 16 08:32:12 UTC 2023] Restarting HTTP services succeeded
[Thu Nov 16 08:32:12 UTC 2023] Success

Jemand eine Idee?


### UPDATE ###
Eventuell liegt es daran, dass ich beim manuelle Befehl den Parameter --insecure mitgeben, damit die SSL Überprüfung nicht stattfindet, was beim automatischen Prozess eventuell nicht der Fall ist?
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Eventuell liegt es daran, dass ich beim manuelle Befehl den Parameter --insecure mitgeben ...
Vermutlich. Wie hast du rausgefunden, dass das bei dir nötig ist? Ich brauch das nicht. Warum?

In der Hilfe steht:
--insecure Do not check the server certificate, in some devices, the api server's certificate may not be trusted.

Vielleicht, weil ich auf all meinen DSen ein selbstsigniertes Zertifikat habe, dass für alle meine lokalen DS- und Computernamen gilt?
Ich kann damit z.B. auch https://ds1522 oder https://ds415 ohne Fehler aufrufen und das gilt vermutlich auch untereinander.
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
ja, weil das Cert nicht für die domain "localhost" augestellt ist, sondern für *.meineDomain.de
Habe es aber nun angepasst und folgendes in der account.conf hinzugefügt:

export SYNO_Hostname='nas.meineDomain.de'

Somit würde auch der Befehl ohne --insecure funktionieren.
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423

Janüscht

Benutzer
Mitglied seit
13. Sep 2020
Beiträge
61
Punkte für Reaktionen
11
Punkte
8
2FA ist nicht aktiviert. Habe testweise https://IP_DER_SYNO:5108 aufgerufen. Es erscheint der DSM Login.
Dort habe ich mich mit Username und Passwort erfolgreich anmelden können, welche in der account.conf für acme hinterlegt sind.
Somit können die Zugangsdaten nicht das Problem sein. Der Witz an der ganzen Sache: Wenn ich das deployment manuell starte, sprich über das Terminal des Containers, klappt es tadellos:
Da liegst du wahrscheinlich falsch, das wird an dein Passwort liegen!
Teste bitte ein einfachen mit Buchstaben und Nummern. Probleme gibt es mit Sonderzeichen, besonders das $-Zeichen mag acme.sh nicht. Zu der Fehlermeldung habe ich hier schon etwas geschrieben.

"Insecure" steht für etwas komplett anderes. Das kommt nur im Einsatz, wenn kein gültiges Zertifikat installiert ist, weil du im Gegensatz zum Browser ja nicht auf ignorieren drücken kannst. Nichts anderes macht "insecure"!
 

Wiesel6

Benutzer
Mitglied seit
22. Aug 2016
Beiträge
272
Punkte für Reaktionen
75
Punkte
28

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
Da liegst du wahrscheinlich falsch, das wird an dein Passwort liegen!
Teste bitte ein einfachen mit Buchstaben und Nummern. Probleme gibt es mit Sonderzeichen, besonders das $-Zeichen mag acme.sh nicht. Zu der Fehlermeldung habe ich hier schon etwas geschrieben.

"Insecure" steht für etwas komplett anderes. Das kommt nur im Einsatz, wenn kein gültiges Zertifikat installiert ist, weil du im Gegensatz zum Browser ja nicht auf ignorieren drücken kannst. Nichts anderes macht "insecure"!
Korrekt. und da ich localhost als Hostname hatte, wofür das Zertifikat nicht gültig ist und die auto. Verlängerung ohne den parameter --insecure arbeitet, fliegt der Prozess auf die Nase.

Die Zugangsdaten sind richtig, denn als ich den Befehl manuell ausgeführt hatte (nur mit --insecure), hat es geklappt.
Wie aber bereits geschrieben, habe ich den hostname angepasst, sodass auch der cert gültig ist. sollte keine Probleme bringen.
 

King3R

Benutzer
Mitglied seit
14. Mrz 2017
Beiträge
356
Punkte für Reaktionen
81
Punkte
28
Ich hab mir dafür noch einen Task erstellt ... dann alles drin, was ich noch so brauche.
Würdest du das Script vielleicht zur Verfügung stellen? Ich hatte deinen Script-Beispiel aus dem diesem Thread schon ausprobiert. Leider deployed er bei mir immer nur zur selben Diskstation, egal was ich exportiere. Aus irgendwelchen Gründen hat er sich auf localhost festgenagelt.
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Ja, das ist der Code. Wenn er bei dir auf localhost beharrt, dann schau mal in die Datei /volume1/docker/acme/<DeineDomain>/<DeineDomain>.conf rein. Da merkt sich acme.sh sowas, z.B. auch das Ziel und die Credentials für den Deploy, aber nur einen.
Code:
...
SAVED_SYNO_Scheme='http'
SAVED_SYNO_Hostname='DS415'
SAVED_SYNO_Port='5000'
SAVED_SYNO_Username='adminuser'
SAVED_SYNO_Password='dessenpasswort'
...
Ich sehe gerade, ich deploye scheinbar über http und gar nicht über https :unsure:
 

King3R

Benutzer
Mitglied seit
14. Mrz 2017
Beiträge
356
Punkte für Reaktionen
81
Punkte
28
Danke. Im Ordner /volume1/docker/acme/<DeineDomain>/<DeineDomain>.conf hatte ich schon geschaut und dort auch die jeweiligen Sachen angepasst. Aber irgendwie will er nicht. Ich muss mir das Ganze noch mal in Ruhe anschauen. Macht es vielleicht einen Unterschied ob ich z. B. SAVED_SYNO_Hostname='DS415' oder SAVED_SYNO_Hostname="DS415" beim Export verwende? Eigentlich nicht, oder? In der .conf habe ich ja dann trotzdem SAVED_SYNO_Hostname='DS415' ...
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Letztendlich zählt bei "acme.sh -deploy ..." das, was in den exportierten Variablen SYNO_Username, SYNO_Password und SYNO_Hostname steht. Sitzen die nicht, nimmt er die Werte aus der .conf vom letzten Mal (SAVED_...).

Ich hab das früher ohne Docker auf der DS selbst gemacht, da sah da das Deploy-Script so aus.
Code:
DOMAIN=example.com
export SYNO_Username="adminuser"
export SYNO_Password="dessenpasswort"
export SYNO_Certificate="*.$DOMAIN"
export SYNO_Hostname="DS1522"
echo "Deploying $SYNO_Certificate to $SYNO_Hostname ..."
~/.acme.sh/acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
export SYNO_Hostname="DS415"
echo "Deploying $SYNO_Certificate to $SYNO_Hostname ..."
~/.acme.sh/acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
(User und Passwort sind auf beiden DSen gleich)
In der .conf landet dann die DS415, da sie als letztes deployed wurde. SYNO_Certificate adressiert die Beschreibung des Zertifikats, das ersetzt werden soll (wichtig, wenn man mehrere hat)
 

Ghost108

Benutzer
Mitglied seit
27. Jun 2015
Beiträge
1.188
Punkte für Reaktionen
52
Punkte
68
So, heute ist das Zertifikat abgelaufen und acme.sh hat es wieder mal nicht verlängert ...
Ich bekomm die Krise.


Bildschirmfoto 2024-02-13 um 14.57.27.png

Logs:
Bildschirmfoto 2024-02-13 um 14.57.40.png

Der lief gestern noch durch und obwohl das Zertifikat heute ablaufen würde, wurde das renew übersprungen.
Jemand eine Idee was es sein kann? Sonst mache ich ein Issue auf Github auf.
 

Benares

Benutzer
Sehr erfahren
Mitglied seit
27. Sep 2008
Beiträge
12.310
Punkte für Reaktionen
2.870
Punkte
423
Die Frage ist, ob das Zertifikat nicht verlängert, oder nur nicht deployed wurde.
Schau mal unter \\<DS>\docker\acme\<deine Domain> von wann die .cer-Dateien sind. Ein Doppelklick zeigt dir deren Eigenschaften.

Edit: und schau auch dort mal in <Domain>.conf-Datei, ob da was zum Deploy drinsteht. Da steht m.W. erst was dazu drin, wenn mind. einmal manuell deployed wurde
 
Zuletzt bearbeitet:

Thonav

Benutzer
Sehr erfahren
Mitglied seit
16. Feb 2014
Beiträge
7.878
Punkte für Reaktionen
1.503
Punkte
274
Bei mir hat es auch nie automatisch verlängert. Habe das Thema bis auf weiteres abgehakt. Wenn aber jemand mal assistieren möchte, so bin ich per PN erreichbar. :)
 


 

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