Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. ACME - Letsencrypt Zertifikate extrahieren

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.8k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.2k

ACME - Letsencrypt Zertifikate extrahieren

Geplant Angeheftet Gesperrt Verschoben JavaScript
1 Beiträge 1 Kommentatoren 398 Aufrufe 1 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • Sven SchumacherS Offline
    Sven SchumacherS Offline
    Sven Schumacher
    schrieb am zuletzt editiert von Sven Schumacher
    #1

    Ich habe einen iobroker, der einige Dienste von Außen erreichbar macht.

    Seit dem IoBroker-Admin nur noch auf den ACME.Adapter verweist, hatte ich das Problem, dass ich das erhaltene Cert nur noch für den Admin nutzen konnte. Es tauchte nirgendwo mehr im Dateisystem auf.

    Ich habe die Zertifikate letzte Woche dann unter system.certificates bei den Objekten gefunden. Dort stehen sie neben den anderen eingetragenen Zertifikaten in einem JSON in einer "collection", die man im ACME.Adapter anlegt.

    Das Script extrahiert key, cert und chain aus der oder den collections und speichert sie in nutzbarer Form in einem Verzeichnis, welches am Anfang des Scripts definiert ist.
    Dem Namen wird der Name der collection vorangestellt. (Falls man mehrere collections nutzen möchte ist das erforderlich)

    Es wird per Voreinstellung ein Flag im gleichen Verzeichnis erzeugt, wenn ein bestehendes Zertifikat sich geändert hat. Damit kann ein systemctl/cron/Aufgabenplanung-Job prüfen, ob ein Dienst neu gestartet werden muss. Das habe ich so gemacht, weil es ohne besondere Rechte funktioniert und unabhängig vom OS oder Geschmacksrichtung.

    Die Konfiguration erfolgt in den Zeilen:

    // Configuration
    const certificatesPath = '/opt/iobroker/certificates/'; // Default certificates directory
    const createFlag = true; // Control whether to create the restart flag
    

    Ich habe mich für /opt/iobroker/certificates/ als Pfadvorgabe entschieden, weil IOBROKER da Schreibrechte besitzt, ohne dass man etwas ändern muss.
    Wer da was anderes möchte muss ggf. die Recht selbst anpassen.

    So kann man die Files in Admin bei den Zertifikaten verlinken und in anderen Adapter nutzen, die die collections von ACME nicht sehen.
    Oder man kann z.B. Grafana damit ausstatten.

    Um das mit GitHub auch mal zu üben, hab ich das hier angelegt. Fragen, Anregungen, Verbesserungsvorschläge oder Hinweise gerne hier. Das Script kann man immer aktuell vom GitHub laden.

    Beispiel für debian systemctl timer-job (wenn man Grafana automatisch neu starten will, wenn es ein neues Cert gibt):
    Ich habe hier eine collection "home" ... ihr müsste das an eure Namen anpassen, wenn hier unten etwas steht wie
    FLAG_FILE="/opt/iobroker/certificates/home_new_ssl_cert.txt"
    "home" ist hier der Name der collection, die ich im ACME.Adapter konfiguriert habe
    93265e40-ea7c-4d32-9cf2-0b15646d3a9e-image.png
    Ebenso ist grafana natürlich nur ein Beispiel.

    Wir brauchen ein Script, was prüft ob das Flag existiert und dann entweder grafana neu startet und das flag löscht , oder eben nichts tut,

    Scriptdatei erstellen:

    sudo nano /usr/local/bin/grafana-restart.sh
    

    Diesen Inhalt einfügen

    #!/bin/bash
    
    # Path to the flag file
    FLAG_FILE="/opt/iobroker/certificates/home_new_ssl_cert.txt"
    
    # Name of the Grafana service
    GRAFANA_SERVICE="grafana-server"
    
    # Check if the flag file exists
    if [ -f "$FLAG_FILE" ]; then
        echo "$(date '+%Y-%m-%d %H:%M:%S') - Flag file found. Restarting Grafana..."
    
        # Restart the Grafana service
        systemctl restart "$GRAFANA_SERVICE"
    
        # Check if the restart was successful
        if [ $? -eq 0 ]; then
            echo "$(date '+%Y-%m-%d %H:%M:%S') - Grafana restarted successfully. Deleting flag file."
    
            # Delete the flag file
            rm "$FLAG_FILE"
        else
            echo "$(date '+%Y-%m-%d %H:%M:%S') - Failed to restart Grafana. Flag file not deleted."
            exit 1
        fi
    else
        echo "$(date '+%Y-%m-%d %H:%M:%S') - No flag file found. No action needed."
    fi
    

    Das Script ausführbar machen:

    sudo chmod +x /usr/local/bin/grafana-restart.sh
    

    Dann brauchen wir eine systemd-Dienstdatei:

    sudo nano /etc/systemd/system/grafana-restart.service
    

    in der dann stehen muss:

    [Unit]
    Description=Restart Grafana if SSL Certificate Flag Exists
    
    [Service]
    Type=oneshot
    ExecStart=/usr/local/bin/grafana-restart.sh
    

    Dazu einen Timer, der die Dienstdatei zur gewünschten Zeit aufruft.

    sudo nano /etc/systemd/system/grafana-restart.timer
    

    mit dem Inhalt:

    [Unit]
    Description=Timer to Restart Grafana if SSL Certificate Flag Exists at 01:00 AM Daily
    
    [Timer]
    OnCalendar=*-*-* 01:00:00
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    

    systemctl neu starten, damit der den neuen Dienst sehen kann.

    sudo systemctl daemon-reload
    

    Und den Dienst aktivieren:

    sudo systemctl enable --now grafana-restart.timer
    

    Und prüfen ob das funktioniert hat:

    Flag manuell erzeugen:

    sudo touch /opt/iobroker/certificates/home_new_ssl_cert.txt
    

    Dienst von Hand starten (nicht erst um 01:00)

    sudo systemctl start grafana-restart.service
    

    Status ausgeben:

    systemctl status grafana-restart.timer
    

    Dann sollte das ungefähr so aussehen am Ende:

    Sep 22 18:03:02 iobroker2 systemd[1]: Starting Restart Grafana if SSL Certificate Flag Exists...
    Sep 22 18:03:02 iobroker2 grafana-restart.sh[115815]: 2024-09-22 18:03:02 - Flag file found. Restarting Grafana...
    Sep 22 18:03:02 iobroker2 grafana-restart.sh[115815]: 2024-09-22 18:03:02 - Grafana restarted successfully. Deleting flag fil>
    Sep 22 18:03:02 iobroker2 systemd[1]: grafana-restart.service: Succeeded.
    Sep 22 18:03:02 iobroker2 systemd[1]: Finished Restart Grafana if SSL Certificate Flag Exists.
    
    1 Antwort Letzte Antwort
    1
    Antworten
    • In einem neuen Thema antworten
    Anmelden zum Antworten
    • Älteste zuerst
    • Neuste zuerst
    • Meiste Stimmen


    Support us

    ioBroker
    Community Adapters
    Donate

    361

    Online

    32.4k

    Benutzer

    81.5k

    Themen

    1.3m

    Beiträge
    Community
    Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
    ioBroker Community 2014-2025
    logo
    • Anmelden

    • Du hast noch kein Konto? Registrieren

    • Anmelden oder registrieren, um zu suchen
    • Erster Beitrag
      Letzter Beitrag
    0
    • Home
    • Aktuell
    • Tags
    • Ungelesen 0
    • Kategorien
    • Unreplied
    • Beliebt
    • GitHub
    • Docu
    • Hilfe