Let’s Encrypt stellt bald (Juni 2020) die alte v01-API ab und wird neue SSL-Zertifikate ab diesem Zeitpunkt ausschließlich über die seit einiger Zeit verfügbare v02-API validieren. Ich verwende, wie im Artikel (Secure) Webhosting 1×1 beschrieben das Werkzeug ‚acmetool‘ zum automatisch Ausstellen und Verlängern von SSL-Zertifikaten. Dieses spricht bei mir nach- wie vor nur die alte API. Demnach bekam ich auch mehrere jener Warn-E-Mails von Let’s Encrypt.
Hi,
According to our records, the software client you're using to get Let's
Encrypt TLS/SSL certificates issued or renewed at least one HTTPS certificate
in the past two weeks using the ACMEv1 protocol. Here are the details of one
recent ACMEv1 request from each of your account(s):
Client IP address: 2a01:4f8:150:8ff8::6
User agent: acmetool acmeapi Go-http-client/1.1 linux/amd64
Hostname(s): "www.commander1024.de"
Request time: 2020-01-15 14:13:12 UTC
Beginning June 1, 2020, we will stop allowing new domains to validate using
the ACMEv1 protocol. You should upgrade to an ACMEv2 compatible client before
then, or certificate issuance will fail. For most people, simply upgrading to
the latest version of your existing client will suffice. You can view the
client list at: https://letsencrypt.org/docs/client-options/
…
Code-Sprache: AsciiDoc (asciidoc)
Client updaten oder wechseln
Das Problem ist nun aber, dass acmetool sowohl im Debian Buster Repository, als auch in den von hlandau offiziell gehosteten Repos max in Version 0.0.67 zu finden ist, welche keinen ACMEv2-Support hat.
Auf der Releases Seite findet man zwar einen Branch acmev2, der bereits geschlossen ist und zurückgemerged wurde und einen Tag 0.2.1, für den aber keine Binaries bereitstehen. Die letzten Commitmeldungen unter Tag 0.2.1 scheinen aber auf ACMEv2 Support hinzudeuten.
Eigentlich ist das Tool aber auch sehr einfach aufgebaut. Es ist ein single golang binary, das auf eine Handvoll Verzeichnisse und Konfigurationsdateien zugreift. Man kann es sich also relativ einfach selbst kompilieren und muss dann (möglicherweise) lediglich noch ein paar Configdateien und Skripte anpassen.
acmetool aus den Quellen kompilieren
Zuerst einmal brauchen wir die Abhängigkeiten
apt install git build-essential libcap-dev golang
Nun holen wir den Code
cd /usr/local/src/
git clone https://github.com/hlandau/acmetool.git
Code-Sprache: PHP (php)
Das Programm kompilieren und installieren
cd acmetool
make
make install
Nun liegt das Programm (single binary) in ‚/usr/local/bin/‘ im Gegensatz zu ‚/usr/bin/‘. Dieser Umstand könnte zu einem Problem mit dem Cronjob
werden, der regemäßig die Zertifikate aktualisieren soll. Dies scheint davon abzuhängen, mit welcher Version das Paket seinerzeit installiert hatte. So sollte ‚/etc/cron.d/acmetool‘ aussehen:
SHELL=/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
MAILTO=root
7 0 * * * root acmetool --batch reconcile
Code-Sprache: Bash (bash)
Im Prinzip habe ich nur den absoluten Pfad zum Binary entfernt. Das geht, weil oben in der PATH -Variable sowohl ‚/usr/bin/‘ als auch ‚/usr/local/bin/‘ als Suchpfad gesetzt werden. So ist der Cronjob mit beiden möglichen Ablagepfaden nutzbar, damit man in der Zukunft wieder auf ein Debian-verwaltetes Paket zurückfallen kann.
Migration der Konfiguration
Die ist einfacher als gedacht, ich hatte aber den ‚acmetool quickstart –expert‘ noch einmal ausgeführt, was entsprechend einen ACMEv2 Account anlegt und dabei das Directory „https://acme-v02.api.letsencrypt.org/directory“ setzt. Der Pfad für „additional webroots“ muss dabei allerdings noch einmal auf den vorher gesetzten Wert angegeben werden. Der lautete ‚/var/run/acme/acme- challenge‘ . Bei der Alogrithmusauswahl ist es durchaus sinnvoll, etwas besseres als RSA auszuwählen, z. B. ECDSA nistp 384.
So sieht es dann schon wieder ganz gut aus.
# acmetool status
Settings:
ACME_STATE_DIR: /var/lib/acme
ACME_HOOKS_DIR: /usr/lib/acme/hooks; /usr/libexec/acme/hooks
Default directory URL: https://acme-v02.api.letsencrypt.org/directory
Preferred key type: ecdsa-nistp384
Additional webroots:
/var/run/acme/acme-challenge
Available accounts:
Account(acme-v01.api.letsencrypt.org%2fdirectory/f44e2f7ae3b5eeed78c127b3b1bd7cf7bc5e3a48979739a74d3784f9f0c67c5e)
thumbprint: 496c5cfc0fbed5d3b06c6464c0b874f61962b1b9a45aab30b51b7461e8435500
Account(acme-v02.api.letsencrypt.org%2fdirectory/46bac141986ffdfba74f0725c5215f266524c2b7956a0e27485309ffe54e82c6)
thumbprint: c7cc84e4b384e16a63a41d6e18f3aa8de82ed14468a3994288d7d7496a9cda5b
Target(cloud.commander1024.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(81612f5a09e718b87f14e1feafe0b9df9bcf851182e975a54b0760000b8ee551)
Target(halimede.commander1024.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(189ddb414e49dbd149953709b39f72d176cc2e5dba94ba86b3412ddd273557f8)
Target(office.commander1024.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(13e97ddb7205d3e4348da820226feb8254033906185842a2d98ca89ce4bc8231)
Target(www.marzinzik-beratung.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(3f47e411ff45d9b29ef0940f82368132763b3020b01f11cf866a5575c37699ba)
Target(gallery.commander1024.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(840c4552d535bf2c3ba2393cffcdba591487c3ddc52b2991c70ff0c1c2f862fd)
Target(mirror7.ipfire.org;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(d7582e1f2fef52208a675b13babe24cc5953aed161cc0ed76bc20524cceead6b)
Target(www.commander1024.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(0638786298b4b444b67f5e79e1ed5f21797aa34b7ec6e014e181a3d4cf8a1a2d)
Target(www.fetroland.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(24532e48a8d6bda29c0b659f164b643204208206c5831de77d395986f386a4fd)
Target(www.goldvibes.de;https://acme-v02.api.letsencrypt.org/directory;0)
best: Certificate(0a9ce0425494b9ac0f467234b847a7f0abcd3bc64be9f81120ff0e0fd95232c8)
Code-Sprache: Bash (bash)
Vielen Dank für diesen Hinweis – ich nutze acme-tiny und hatte bisher noch keine Hinweis-Mails, aber ich habe das mal zum Anlass genommen, mir meine Konfiguration anzuschauen.
Mein Checkout war Stand 2017, 68 Commits im Rückstand und im Changelog steht auch was mit Protokoll v2