Let's Encrypt - acme.sh
-
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!
GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol
A pure Unix shell script implementing ACME client protocol - acmesh-official/acme.sh
GitHub (github.com)
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
-
-
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.
-
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