Let´s Encrypt, bei Zertifkaterneuerung Dienst neu starten

Avenger84

Lt. Commander
Registriert
Feb. 2008
Beiträge
1.558
Hallo, ich nutze Certbot für meine Seite, dieser hat mir "snap.certbot.renew.service" in "systemctl list-timers" installiert.
Die Zertifikate nutze ich auch im MQTT Broker:

Code:
listen {
  protocol websockets
  fullchain /etc/letsencrypt/live/ich.de/fullchain.pem
  privkey /etc/letsencrypt/live/ich.de/privkey.pem
}

Nun würde ich gern bei Erneuerung der Zertifkate den MQTT Broker neu starten mit
"systemctl reload flashmq.service"
Allerdings nicht alle 6h bei Aufruf des "snap.certbot.renew.service" - wo finde ich diesen Timer eigentlich (rein Interessehalber) ?

Für Mosquitto gibt es extra ein Skript, was die Zertifikate bei Erneuerung raus kopiert, mit passenden Rechten versieht und Mosqutti neu startet, da Mosquitto keine root Rechte hat:
https://raw.githubusercontent.com/eclipse/mosquitto/master/misc/letsencrypt/mosquitto-copy.sh

dort heißt es u.a.:
# Place this script in /etc/letsencrypt/renewal-hooks/deploy/ and make it
# executable after editing it to your needs.

Reicht es dann ein Skript zu erstellen wo ich rein schreibe "systemctl reload flashmq.service" und gut?

bin da leider nicht sooo tief im Thema und will nichts falsch machen.
Wenn das so einfach ist mit dem /etc/letsencrypt/renewal-hooks/deploy/ Ordner wäre das ja schön.

Aus der Beschreibung von FlashMQ zu let´s encrypt werde ich nicht ganz schlau:
https://www.flashmq.org/documentation/lets-encrypt/

Edit: oder denke ich zu kompliziert und das ganze ist gar nicht nötig, da FlashMQ direkten Zugriff auf die Zertifikate hat?

MfG
 
Avenger84 schrieb:
Reicht es dann ein Skript zu erstellen wo ich rein schreibe "systemctl reload flashmq.service" und gut?
Ich würde vielleicht nicht mal einen Service anlegen, sondern entweder ein Bash-Skript in /etc/cron.daily/weekly/hourly etc reinpacken

Oder crontab -e aufrufen und dort das eigentliche Skript per Einzeiler triggern

Bash:
* * * * * bash /home/user/renewal-script.sh
(Nur ein BEISPIEL, bitte lies Dich da ein)
 
Avenger84 schrieb:
Allerdings nicht alle 6h bei Aufruf des "snap.certbot.renew.service" - wo finde ich diesen Timer eigentlich (rein Interessehalber) ?
Normalerweise sind sowohl der systemd .service als auch dessen .timer unter /etc/systemd/system/
 
  • Gefällt mir
Reaktionen: Avenger84
Avenger84 schrieb:
Für Mosquitto gibt es extra ein Skript, was die Zertifikate bei Erneuerung raus kopiert, mit passenden Rechten versieht und Mosqutti neu startet, da Mosquitto keine root Rechte hat:
https://raw.githubusercontent.com/eclipse/mosquitto/master/misc/letsencrypt/mosquitto-copy.sh

dort heißt es u.a.:

Reicht es dann ein Skript zu erstellen wo ich rein schreibe "systemctl reload flashmq.service" und gut?

bin da leider nicht sooo tief im Thema und will nichts falsch machen.
Wenn das so einfach ist mit dem /etc/letsencrypt/renewal-hooks/deploy/ Ordner wäre das ja schön.

Aus der Beschreibung von FlashMQ zu let´s encrypt werde ich nicht ganz schlau:
https://www.flashmq.org/documentation/lets-encrypt/
So ungefähr mach ich das auch mit dehydrated.

Da gibts ne "hook.sh", wo man Befehle eintippen kann, die automatisch bei bestimmten Ereignissen ausgeführt werden. Ich hab da z.B. unter "deploy_cert()" stehen:

Code:
deploy_cert() {
    local DOMAIN="${1}" KEYFILE="${2}" CERTFILE="${3}" FULLCHAINFILE="${4}" CHAINFILE="${5}" TIMESTAMP="${6}"

    # This hook is called once for each certificate that has been
    # produced. Here you might, for instance, copy your new certificates
    # to service-specific locations and reload the service.
    #
    # Parameters:
    # - DOMAIN
    #   The primary domain name, i.e. the certificate common
    #   name (CN).
    # - KEYFILE
    #   The path of the file containing the private key.
    # - CERTFILE
    #   The path of the file containing the signed certificate.
    # - FULLCHAINFILE
    #   The path of the file containing the full certificate chain.
    # - CHAINFILE
    #   The path of the file containing the intermediate certificate(s).
    # - TIMESTAMP
    #   Timestamp when the specified certificate was created.
 
    if [ "$DOMAIN" = "srv1.domain1.de" ]
      then
        chown prosody:prosody -R /etc/dehydrated/certs/srv1.domain1.de
        systemctl restart prosody
    fi
    if [ "$DOMAIN" = "host1.domain1.de" ]
      then
        systemctl reload apache2
        systemctl restart proftpd
    fi
    if [ "$DOMAIN" = "host2.domain2.de" ]
      then
        systemctl reload apache2
    fi

    # Simple example: Copy file to nginx config
    # cp "${KEYFILE}" "${FULLCHAINFILE}" /etc/nginx/ssl/; chown -R nginx: /etc/nginx/ssl
    # systemctl reload nginx

Restartet den Apache-, proftpd- und/oder den Jabber-Server automatisch, sowie ein Zertifikat erneuert wurde. Gibt da noch mehr Ereignisse in der hook.sh, womit man was triggern kann, aber ich denke "deploy_cert()" ist so das, was die meisten haben wollen.

Ich denke mal, so ähnlich dürfte das auch mit certbot gehen. Irgendwelche cron-Timer würde ich jedenfalls nicht nutzen. Die hooks sind genau das, was du haben willst.
 
Zuletzt bearbeitet:
Viel zu kompliziert alles, ich habe in die /etc/letsencrypt/renewal-hooks/deploy eine .sh gepackt, dort einfach nur "systemctl reload flashmq" (root:root, ausführbar für alle).

Ob es klappt sehe ich erst in 60 oder 90 Tagen, wenn Certbot die Zertifikate neu geladen hat.

Nach einer erfolgreichen Erneuerung durch Certbot, werden alle ausführbaren Dateien in /etc/letsencrypt/renewal-hooks/deploy ausgeführt, so auch wohl meine.
 
Zuletzt bearbeitet:
Laut Hersteller reload
1708463053405.png


braucht es "#!/bin/bash" eigentlich nicht ?
also in meiner .sh
 
Zurück
Oben