let­sen­crypt wild­card cer­ti­fi­ca­te mit acme​.sh und Hetz­ner DNS

Inhalt

Bis­her habe ich eini­ge Klimm­zü­ge machen müs­sen, um über einen exter­nen, per API steu­er­ba­ren DNS-Pro­vi­der ein Wild­card-Zer­ti­fi­kat für eine Sub­do­main mei­ner Domain beim Web-Hos­ter Hetz­ner zu bekom­men (sie­he auch Let’s Encrypt Zer­ti­fi­kat für das Heim-Netz”). Das hat sich mit Ein­füh­rung der Hetz­ner DNS-Con­so­le ent­schei­dend ver­ein­facht. Hier liest Du, wie Du die Con­so­le ein­rich­test und das ers­te Zer­ti­fi­kat mit dem acme​.sh Script erzeugst.

Vor­be­rei­tung

Im ers­ten Schritt bean­tragst Du einen Zugang zur Hetz­ner DNS Con­so­le. Dazu klickst Du auf hetz​ner​.com auf den Log­in-Knopf rechts in der Titel­leis­te und wählst im Aus­klapp­me­nü „DNS”. Auf der fol­gen­den Sei­te klickst Du ganz unten „Jetzt Regis­trie­ren” und folgst dem Pro­zess inklu­si­ve der eMail-Bestä­ti­gung. Irgend­wann im Lau­fe der Regis­trie­rung wird auch nach Zah­lungs­ar­ten gefragt, obwohl die DNS-Con­so­le kos­ten­los ist - wäh­le dort ein­fach pro for­ma „Pay­pal” aus, dann wird nicht nach wei­te­ren Daten gefragt.

Wie die Umstel­lung der bestehen­den Domain auf die DNS Con­so­le erfol­gen soll, war mir zunächst unklar und wird auch nir­gends erklärt. Des­we­gen frag­te ich beim Hetz­ner Sup­port nach. Er ant­wor­te­te mir:

um die Umstel­lung vor­zu­neh­men, müs­sen Sie die Zone in kon­so­leH zuerst löschen, danach eine neue Zone in der DNS Con­so­le anle­gen und ihre gewünsch­ten Ein­trä­ge vor­neh­men.
Die NS Ein­trä­ge ihrer Domain müs­sen dann auf fol­gen­de Name­ser­ver zei­gen:

hydro​gen​.ns​.hetz​ner​.com
oxy​gen​.ns​.hetz​ner​.com
heli​um​.ns​.hetz​ner​.de

Nach­dem die Zone in der DNS Con­so­le ange­legt ist und soweit kor­rekt, ant­wor­ten Sie bit­te hier im Ticket noch­mal, damit die Domain auf die neu­en Name­ser­ver umge­stellt wird.

Bit­te beach­ten Sie, dass bei die­ser Umstel­lung eine Down­ti­me zu erwar­ten ist.

(Quel­le: Hetz­ner Support)

Als nächs­tes ist die Daten­si­che­rung wich­tig: spei­che­re dir einen Screen­shot der DNS-Ein­stel­lun­gen der kon­so­leH und den Inhalt des zone-files sicher ab. Du brauchst die Infor­ma­tio­nen später.

Umstel­lung auf DNS Console

Jetzt Ende brauchst Du Mut: lösche die Zone in der kon­so­leH. Ab hier bis zur Akti­vie­rung der neu­en DNS-Ser­ver lie­fert der Hetz­ner DNS kei­ne Auf­lö­sung mehr für dei­ne Domain und Sub­do­mains aus, was dei­ne Sei­te nach Ablauf der TTL uner­reich­bar macht.

Jetzt folgt die Über­tra­gung dei­ner Domain-Ver­wal­tung von der kon­so­leH zur DNS Con­so­le, also die Defi­ni­ti­on der A, AAAA, CNAME, MX und NS Records in der DNS Con­so­le. Ent­we­der trägst Du Zei­le für Zei­le die gesi­cher­ten Ein­trä­ge über die Web-Ober­flä­che ein, oder Du erzeugst den zone file über „Edit zone file” kom­plett selbst (wenn Du weißt, was Du tust - Die War­nung davor soll­test Du ernst nehmen).

Ist alles ein­ge­tra­gen, ant­wor­test Du auf die Sup­port-Mail mit der Bit­te um Umstel­lung auf die neu­en DNS-Ser­ver. Das soll­te inner­halb eines Werk­tags gesche­hen - so lan­ge kön­nen dei­ne Domain und Sub­do­mains teil­wei­se oder kom­plett nicht erreich­bar sein.

Ein­rich­tung von acme​.sh

Ers­te Wahl für einen let­sen­rypt-Cli­ent ist meist cert­bot, der von let­sen­crypt selbst auch emp­foh­len wird. Aller­dings wird seit eini­ger Zeit in den meis­ten Linux-Dis­tri­bu­tio­nen nicht mehr das nati­ve cert­bot-Paket gepflegt, son­dern nur noch ein snap- bzw. flat­pack-Paket. Mei­ne Abnei­gung gegen die­se Resour­cen­fres­ser lie­ßen damit cert­bot ausscheiden.

Mei­ne Wahl fiel auf acme​.sh, das sehr schlank ist, aktiv gepflegt wird, für nahe­zu jede Platt­form ver­füg­bar ist und sehr vie­le dns­a­pi-Plug­ins mit­lie­fert, unter ande­rem auch für Hetzner.

Der acme-Cli­ent läuft übri­gens auf einem Raspber­ry Pi mit Ras­bi­an Bus­ter, der stän­dig online ist und alles hos­tet, was bei mir immer ver­füg­bar sein muss.

Die Instal­la­ti­on habe ich über git­hub 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ür­lich dei­ne Mail-Adres­se ein, über die Du über rene­wals oder Pro­ble­me infor­miert wer­den willst.

Sowohl Instal­la­ti­on als auch Aus­füh­rung des Scripts muss übri­gens nicht als root lau­fen; bei mir mach dass der Stan­dard-User pi.

DNS Token erzeugen

Damit acme​.sh auf die Hetz­ner DNS Con­so­le zugrei­fen kann, um dort die DNS-chall­enge als TXT Record abzu­le­gen, braucht es einen Zugriffs-Token. Die Funk­ti­on ver­steckt sich auf der rech­ten Sei­te der Home­page unter „Mana­ge API Tokens”.

Den erzeug­ten Token musst Du sicher spei­chern, denn er wird nur ein­mal angezeigt.

Ers­tes Zer­ti­fi­kat abrufen

Die Erzeu­gung des Zer­ti­fi­kats erle­digst Du auf der Kom­man­do­zei­le. Gehe in das .acme​.sh Ver­zeich­nis und set­ze fol­gen­de Kom­man­dos ab: 

export HETZNER_Token="secretlineofrandomcharacters"
./acme.sh --issue --dns dns_hetzner -d '*.my.domain.de'

Du musst natür­lich „secret­li­neof­ran­dom­cha­rac­ters” mit dei­nem DNS-Token ersetzen.

Das Script küm­mert sich um alle Ein­zel­hei­ten, auch um das Anle­gen und Löschen des TXT-Records im Hetz­ner DNS über die dnsapi.

Es wird ein recht aus­führ­li­ches Pro­to­koll der Akti­vi­tä­ten ange­zeigt, und wenn alles gut geht, zeigt dir das Script nach etwa einer Minu­te, wo das abge­ru­fe­ne Zer­ti­fi­kat gespei­chert wurde.

Um die Erneue­rung musst Du dich nicht mehr küm­mern, denn acme​.sh hat einen cron-Job ange­legt, der täg­lich um 0:33 Uhr läuft und das Zer­ti­fi­kat alle 60 Tage auf­fri­schen lässt.

33 0 * * * "/home/pi/.acme.sh"/acme.sh --cron --home "/home/pi/.acme.sh" > /dev/null

Ein­zi­ge ver­blie­be­ne Auf­ga­be ist jetzt noch die Ver­tei­lung der Zer­ti­fi­ka­te an die ent­spre­chen­den Stel­len inklu­si­ve set­zen der Eigen­tü­mer und Zugriffs­rech­te. Das erle­digt bei mir ein Python-Script, das jede Nach nach dem acm​.sh Script läuft und bei Bedarf die erneu­er­ten Zer­ti­fi­ka­te an die Ziel­or­te kopiert.

Ein Kommentar

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

16 + 6 =