Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. ACME - Letsencrypt Zertifikate extrahieren

    NEWS

    • Monatsrückblick - April 2025

    • Minor js-controller 7.0.7 Update in latest repo

    • Save The Date: ioBroker@Smart Living Forum Solingen, 14.06.

    ACME - Letsencrypt Zertifikate extrahieren

    This topic has been deleted. Only users with topic management privileges can see it.
    • Sven Schumacher
      Sven Schumacher last edited by Sven Schumacher

      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 Reply Last reply Reply Quote 1
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      1.0k
      Online

      31.6k
      Users

      79.4k
      Topics

      1.3m
      Posts

      1
      1
      197
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo