Inhalt
Bisher habe ich einige Klimmzüge machen müssen, um über einen externen, per API steuerbaren DNS-Provider ein Wildcard-Zertifikat für eine Subdomain meiner Domain beim Web-Hoster Hetzner zu bekommen (siehe auch „Let’s Encrypt Zertifikat für das Heim-Netz”). Das hat sich mit Einführung der Hetzner DNS-Console entscheidend vereinfacht. Hier liest Du, wie Du die Console einrichtest und das erste Zertifikat mit dem acme.sh Script erzeugst.
Vorbereitung
Im ersten Schritt beantragst Du einen Zugang zur Hetzner DNS Console. Dazu klickst Du auf hetzner.com auf den Login-Knopf rechts in der Titelleiste und wählst im Ausklappmenü „DNS”. Auf der folgenden Seite klickst Du ganz unten „Jetzt Registrieren” und folgst dem Prozess inklusive der eMail-Bestätigung. Irgendwann im Laufe der Registrierung wird auch nach Zahlungsarten gefragt, obwohl die DNS-Console kostenlos ist - wähle dort einfach pro forma „Paypal” aus, dann wird nicht nach weiteren Daten gefragt.
Wie die Umstellung der bestehenden Domain auf die DNS Console erfolgen soll, war mir zunächst unklar und wird auch nirgends erklärt. Deswegen fragte ich beim Hetzner Support nach. Er antwortete mir:
um die Umstellung vorzunehmen, müssen Sie die Zone in konsoleH zuerst löschen, danach eine neue Zone in der DNS Console anlegen und ihre gewünschten Einträge vornehmen.
(Quelle: Hetzner Support)
Die NS Einträge ihrer Domain müssen dann auf folgende Nameserver zeigen:
hydrogen.ns.hetzner.com
oxygen.ns.hetzner.com
helium.ns.hetzner.de
Nachdem die Zone in der DNS Console angelegt ist und soweit korrekt, antworten Sie bitte hier im Ticket nochmal, damit die Domain auf die neuen Nameserver umgestellt wird.
Bitte beachten Sie, dass bei dieser Umstellung eine Downtime zu erwarten ist.
Als nächstes ist die Datensicherung wichtig: speichere dir einen Screenshot der DNS-Einstellungen der konsoleH und den Inhalt des zone-files sicher ab. Du brauchst die Informationen später.
Umstellung auf DNS Console
Jetzt Ende brauchst Du Mut: lösche die Zone in der konsoleH. Ab hier bis zur Aktivierung der neuen DNS-Server liefert der Hetzner DNS keine Auflösung mehr für deine Domain und Subdomains aus, was deine Seite nach Ablauf der TTL unerreichbar macht.
Jetzt folgt die Übertragung deiner Domain-Verwaltung von der konsoleH zur DNS Console, also die Definition der A, AAAA, CNAME, MX und NS Records in der DNS Console. Entweder trägst Du Zeile für Zeile die gesicherten Einträge über die Web-Oberfläche ein, oder Du erzeugst den zone file über „Edit zone file” komplett selbst (wenn Du weißt, was Du tust - Die Warnung davor solltest Du ernst nehmen).
Ist alles eingetragen, antwortest Du auf die Support-Mail mit der Bitte um Umstellung auf die neuen DNS-Server. Das sollte innerhalb eines Werktags geschehen - so lange können deine Domain und Subdomains teilweise oder komplett nicht erreichbar sein.
Einrichtung von acme.sh
Erste Wahl für einen letsenrypt-Client ist meist certbot, der von letsencrypt selbst auch empfohlen wird. Allerdings wird seit einiger Zeit in den meisten Linux-Distributionen nicht mehr das native certbot-Paket gepflegt, sondern nur noch ein snap- bzw. flatpack-Paket. Meine Abneigung gegen diese Resourcenfresser ließen damit certbot ausscheiden.
Meine Wahl fiel auf acme.sh, das sehr schlank ist, aktiv gepflegt wird, für nahezu jede Plattform verfügbar ist und sehr viele dnsapi-Plugins mitliefert, unter anderem auch für Hetzner.
Der acme-Client läuft übrigens auf einem Raspberry Pi mit Rasbian Buster, der ständig online ist und alles hostet, was bei mir immer verfügbar sein muss.
Die Installation habe ich über github erledigt:
git clone https://github.com/acmesh-official/acme.sh.git
cd ./acme.sh
./acme.sh --install -m my@example.com
Statt „my@example.com” setzt Du natürlich deine Mail-Adresse ein, über die Du über renewals oder Probleme informiert werden willst.
Sowohl Installation als auch Ausführung des Scripts muss übrigens nicht als root laufen; bei mir mach dass der Standard-User pi.
DNS Token erzeugen
Damit acme.sh auf die Hetzner DNS Console zugreifen kann, um dort die DNS-challenge als TXT Record abzulegen, braucht es einen Zugriffs-Token. Die Funktion versteckt sich auf der rechten Seite der Homepage unter „Manage API Tokens”.
Den erzeugten Token musst Du sicher speichern, denn er wird nur einmal angezeigt.
Erstes Zertifikat abrufen
Die Erzeugung des Zertifikats erledigst Du auf der Kommandozeile. Gehe in das .acme.sh Verzeichnis und setze folgende Kommandos ab:
export HETZNER_Token="secretlineofrandomcharacters"
./acme.sh --issue --dns dns_hetzner -d '*.my.domain.de'
Du musst natürlich „secretlineofrandomcharacters” mit deinem DNS-Token ersetzen.
Das Script kümmert sich um alle Einzelheiten, auch um das Anlegen und Löschen des TXT-Records im Hetzner DNS über die dnsapi.
Es wird ein recht ausführliches Protokoll der Aktivitäten angezeigt, und wenn alles gut geht, zeigt dir das Script nach etwa einer Minute, wo das abgerufene Zertifikat gespeichert wurde.
Um die Erneuerung musst Du dich nicht mehr kümmern, denn acme.sh hat einen cron-Job angelegt, der täglich um 0:33 Uhr läuft und das Zertifikat alle 60 Tage auffrischen lässt.
33 0 * * * "/home/pi/.acme.sh"/acme.sh --cron --home "/home/pi/.acme.sh" > /dev/null
Einzige verbliebene Aufgabe ist jetzt noch die Verteilung der Zertifikate an die entsprechenden Stellen inklusive setzen der Eigentümer und Zugriffsrechte. Das erledigt bei mir ein Python-Script, das jede Nach nach dem acm.sh Script läuft und bei Bedarf die erneuerten Zertifikate an die Zielorte kopiert.
Vielen Dank für die tolle Beschreibung, hat mir weitergeholfen 🙂