Skip to content

Let's Encrypt - acme.sh

Verschoben Let's Encrypt
  • Wenn ich mit @Nico über Let's Encrypt und den certbot unterhalte, ich habe da schon länger ein Berechtigungsproblem, kommt immer ganz trocken acme.sh

    Ok, dann beschäftige ich mich mal kurz damit.

    Voraussetzungen

    apt install socat git
    

    Zertifikate werden von Let's Encrypt abgeholt.

    Installation

    git clone https://github.com/acmesh-official/acme.sh.git
    cd acme.sh
    ./acme.sh --install
    

    Zertifikat registrieren

    root@:~# ./acme.sh --server letsencrypt --standalone --issue -d example.com
    [Sun 31 Jul 2022 08:52:03 AM CEST] Using CA: https://acme-v02.api.letsencrypt.org/directory
    [Sun 31 Jul 2022 08:52:03 AM CEST] Standalone mode.
    [Sun 31 Jul 2022 08:52:03 AM CEST] Single domain='example.com'
    [Sun 31 Jul 2022 08:52:03 AM CEST] Getting domain auth token for each domain
    [Sun 31 Jul 2022 08:52:05 AM CEST] Getting webroot for domain='example.com'
    [Sun 31 Jul 2022 08:52:05 AM CEST] Verifying: example.com
    [Sun 31 Jul 2022 08:52:05 AM CEST] Standalone mode server
    [Sun 31 Jul 2022 08:52:07 AM CEST] Pending, The CA is processing your order, please just wait. (1/30)
    [Sun 31 Jul 2022 08:52:10 AM CEST] Success
    [Sun 31 Jul 2022 08:52:10 AM CEST] Verify finished, start to sign.
    [Sun 31 Jul 2022 08:52:10 AM CEST] Lets finalize the order.
    [Sun 31 Jul 2022 08:52:10 AM CEST] Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/xxxxxx/xxxxxxx'
    [Sun 31 Jul 2022 08:52:11 AM CEST] Downloading cert.
    [Sun 31 Jul 2022 08:52:11 AM CEST] Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/xxxxxxxxxxxxxxxxxxx'
    [Sun 31 Jul 2022 08:52:12 AM CEST] Cert success.
    -----BEGIN CERTIFICATE-----
    
    -----END CERTIFICATE-----
    [Sun 31 Jul 2022 08:52:12 AM CEST] Your cert is in: /root/.acme.sh/example.com/example.com.cer
    [Sun 31 Jul 2022 08:52:12 AM CEST] Your cert key is in: /root/.acme.sh/example.com/example.com.key
    [Sun 31 Jul 2022 08:52:12 AM CEST] The intermediate CA cert is in: /root/.acme.sh/example.com/ca.cer
    [Sun 31 Jul 2022 08:52:12 AM CEST] And the full chain certs is there: /root/.acme.sh/example.com/fullchain.cer
    

    Zertifikat installieren

     root@:~/.acme.sh# ./acme.sh --install-cert -d example.com --cert-file /path/cert.pem --key-file /path/key.pem --fullchain-file path/fullchain.pem --reloadcmd "systemctl restart server.service"
    

    Aus der Anleitung

    acme.sh --install-cert -d example.com \
    --cert-file      /path/to/certfile/in/apache/cert.pem  \
    --key-file       /path/to/keyfile/in/apache/key.pem  \
    --fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
    --reloadcmd     "service apache2 force-reload"
    

    Dabei sind ein paar Dinge wichtig. Die originalen Zertifikatsdateien soll man nicht benutzen, dazu gibt es den --install-cert Befehl.

    Die Benutzerrechte des Zielordners werden beibehalten!

    Dienst oder Webhost anpassen

    Das ist ein Beispiel, wie ich den REST-Server von Restic starte. Auskommentiert ist vorher, die Zeile danach mit den Zertifikaten die von acme.sh erzeugt wurden.

    #ExecStart=/usr/local/bin/rest-server --private-repos --tls --tls-cert /etc/letsencrypt/live/example.com/fullchain.pem --tls-key /etc/letsencrypt/live/example.com/privkey.pem --path /mnt/rest-server
    ExecStart=/usr/local/bin/rest-server --private-repos --tls --tls-cert /path/example.com/fullchain.pem --tls-key /pace/example.com/key.pem --path /mnt/rest-server
    

    Done!

    @Nico Danke 😉

  • Wenn man nicht möchte, das acme.sh sich selbst aktualisiert, kann man das ausschalten.

    acme.sh --upgrade --auto-upgrade 0
    

    Quelle: https://blog.effenberger.org/2018/07/07/x-509-zertifikate-mit-acme-sh-und-lets-encrypt/

  • Das Zertifikat wird, wie gewohnt, über einen crontab aktualisiert. Dazu legt das acme.sh einen Eintrag an, dieser sieht so aus.

    0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
    
  • FrankMF FrankM verschob dieses Thema von Privat am
  • Da ich heute mal wieder Startprobleme hatte, musste ich mich mit der Installation eines Zertifikates intensiver beschäftigen.

    Im Ausgangs Thread habe ich einen wichtigen Installationsschritt vergessen, das Zertifikat muss auch noch installiert werden. Das habe ich heute oben so ergänzt. Jetzt sollte es hoffentlich komplett sein.

  • Wir haben ein neues Zertifikat installiert und wollen jetzt das alte löschen.

    ./acme.sh --revoke -d <DOMAIN>

    Danach wird es entfernt.

  • Der Monat ist um, es war Zertifikatsmonat. Und nichts lief mehr..... 😞

    Was war passiert?

    Sonntags mache ich von meinem Haupt-PC ein Backup (per Hand) mittels Restic auf meinen Rest-Server. Doch ich bekam eine Fehlermeldung, blabla Zertifikat usw.

    Ok, ab auf den Server und mit der Fehlersuche gestartet. Das Zertifikat war erneuert worden, aber der Restart Command versuchte immer eine server.service zu starten, die es gar nicht gab!?

    Da musste ich doch beim @Nico mal kurz nachfragen. Und das kam dann dabei raus.

    Fehlerursache

    Der ReloadCmd versuchte einen server.service zu restarten, den es gar nicht gibt.

    Suche

    Im acme Pfad liegen die Ordner für die Domains. In diesem Ordner liegt eine Datei DOMAIN.conf

    In dieser Datei werden bei der Installation des Zertfikiates eine Reihe von Dingen eingetragen.

    Le_Domain='DOMAIN'
    Le_Alt='no'
    Le_Webroot='no'
    Le_PreHook=''
    Le_PostHook=''
    Le_RenewHook=''
    Le_API='https://acme-v02.api.letsencrypt.org/directory'
    Le_Keylength='2048'
    Le_OrderFinalize='https://acme-v02.api.letsencrypt.org/acme/finalize/<ID>'
    Le_LinkOrder='https://acme-v02.api.letsencrypt.org/acme/order/<ID>'
    Le_LinkCert='https://acme-v02.api.letsencrypt.org/acme/cert/>ID>'
    Le_CertCreateTime='1680440374'
    Le_CertCreateTimeStr='2023-04-02T12:59:34Z'
    Le_NextRenewTimeStr='2023-05-31T12:59:34Z'
    Le_NextRenewTime='1685537974'
    Le_RealCertPath='/mnt/rest-server/DOMAIN/cert.pem'
    Le_RealCACertPath=''
    Le_RealKeyPath='/mnt/rest-server/DOMAIN/key.pem'    Le_ReloadCmd='__ACME_BASE64__START_c3lzdGVtY3RsIHJlc3RhcnQgc2VydmVyLnNlcnZpY2U=__ACME_BASE64__END_'    
    Le_RealFullChainPath='/mnt/rest-server/DOMAIN/fullchain.pem'
    

    Ok, da ist der ReloadCmd, aber der ist base64 kodiert!? Was machen.

    # echo c3lzdGVtY3RsIHJlc3RhcnQgc2VydmVyLnNlcnZpY2U= | base64 -d
    systemctl restart server.service
    

    Ok, hier sehen wir die fehlerhafte Eintragung, die genau meinem Beispiel oben entspricht (unter Installation Zertifikat) Man könnte jetzt die Installation des Zertifikates mit dem korrigierten EIntrag durchführen, oder diese Base64 Zeile korrigieren. Ok, wie geht das?

    # echo systemctl restart rest-server.service | base64
    c3lzdGVtY3RsIHJlc3RhcnQgcmVzdC1zZXJ2ZXIuc2VydmljZQo=
    

    Diese Ausgabe kopieren wir dann in die Konfigurationsdatei. Kurze Kontrolle

    # echo c3lzdGVtY3RsIHJlc3RhcnQgcmVzdC1zZXJ2ZXIuc2VydmljZQo= | base64 -d
    systemctl restart rest-server.service
    

    Passt 😊 Und wieder jede Menge gelernt. Danke @Nico

  • Let's Encrypt - Crontab

    Let's Encrypt
    1
    0 Stimmen
    1 Beiträge
    203 Aufrufe
    Niemand hat geantwortet
  • 0 Stimmen
    2 Beiträge
    281 Aufrufe
    FrankMF

    Durch meinen Umzug zu einem neuen Proxmox, habe ich die Gelegenheit genutzt und meine Server alle auf Debian 11 Bullseye neu installiert. So konnte ich das alles noch mal testen und meine Doku anpassen.

    Zu dem obigen Beitrag gibt es nur folgendes zu ergänzen. Ja, wir wollen ja auch was Aktuelles haben 😉

    NodeJS

    Link Preview Image Node.js

    Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

    favicon

    (nodejs.org)

    curl -fsSL https://deb.nodesource.com/setup_14.x | bash - NodeBB git clone -b v1.18.x https://github.com/NodeBB/NodeBB.git nodebb

    https://github.com/NodeBB/NodeBB/branches

  • Let's Encrypt installieren

    Verschoben Let's Encrypt
    3
    0 Stimmen
    3 Beiträge
    1k Aufrufe
    FrankMF

    Wenn ihr alles richtig gemacht habt, dann könnt ihr Euer Zertifikat überprüfen lassen. Sollte dann so aussehen.

    0_1538314120455_index.jpeg

  • 0 Stimmen
    1 Beiträge
    773 Aufrufe
    Niemand hat geantwortet