⇤ ← Revision 1 vom 2020-08-21 11:28:10
Größe: 5082
Kommentar:
|
← Revision 2 vom 2024-01-31 22:07:28 ⇥
Größe: 0
Kommentar: Gibt es nicht mehr
|
Gelöschter Text ist auf diese Art markiert. | Hinzugefügter Text ist auf diese Art markiert. |
Zeile 1: | Zeile 1: |
<<TableOfContents>> /!\ Diese Anleitung ist erfolgreich getestet, aber nur mit einer Domain. Feedback ist erwünscht. = Hintergrund: Was ist ACME-DNS und warum? = Let's Encrypt (und andere änliche Anbieter) unterstützen mehrere Verfahren, um den Eigentümer einer Domain zu verifizieren. Bei den meisten Verfahren muss vom Server (genauer, der selben IP) eine Antwort geschickt werden. Das DNS-01-Verfahren bildet hier die Ausnahme, die Antwort wird hier aus dem DNS gelesen. Das hat den Vorteil, daß das Verfahren auch für Server genutzt werden kann, die von Außen nicht erreichbar sind. Das Weiteren verlangt Let's Encrypt für die Ausstellung von Wildcard-Zertifikaten auch DNS-01 zwingend. Jetzt möchte man natürlich nicht ständig seine DNS-Zonen modifizieren und dynamische DNS-Zonen haben auch einige Probleme, die man evtl. nicht akzeptieren möchte. Als Lösung ist ACME-DNS entstanden. Das ist ein kleiner Server, der nur DNS-01-spezifische DNS-Anfragen beantwortet und gleichzeitig dem Benutzer eine HTTPS-Schnittstelle zur Verfügung stellt, um die Let's Encrypt Token zu konfigurieren. = Setup = Der dedizierte Server {{{acme-dns.ping.de}}} bietet genau den einen Service an. == DNS == Im [[HowTos/TinyDNS|TinyDNS]] ist zusätzlich zu dem automatisch generierten A- und PTR-Record noch ein SOA-, NS- und HINFO-Record manuell konfiguriert: {{{ .acme-dns.ping.de::acme-dns.ping.de :acme-dns.ping.de:13:\007RFC8482\000 }}} Dadurch werden Anfragen nach acme-dns.ping.de vom normalen PING-DNS beantwortet, Anfragen nach *.acme-dns.ping.de aber an den Server weiter geleitet. /!\ Der ACME-DNS-Service muss laufen, sonst kommt es auf externen Systemen zu Problemen mit der Namensauflösung. /!\ Der DNS-Update-Zyklus muss zwischen Einrichtung des DNS und Start des ACME-DNS-Servers abgewartet werden, sonst kann kein Zertifikat für die API generiert werden. Alternativ kann der Service initial via HTTP konfiguriert werden, so kann dieser getestet bevor Let's Encrypts DNS-Server die Zone kennt. = Benutzung = == Vorbereitung == === ACME-DNS Account === Über die HTTPS-API wird zunächst ein Account erzeugt: {{{ curl -s -X POST https://acme-dns.ping.de/register | python -m json.tool { "allowfrom": [], "fulldomain": "d716b142-fe8a-4095-a854-c773e9b7d064.acme-dns.ping.de", "password": "o9kIYZfRA4se4iY_GYlGOU9DXMsKvK70s0kjRP82", "subdomain": "8eb706bb-b0c3-46ed-9793-8cd7f3340402", "username": "eaed401c-ae16-431a-8394-a7700fdb03aa" } }}} Die zurück gegebenen Werte werden im späteren Verlauf benötigt. === DNS === Im DNS wird in der passenden Zone ein CNAME-Record mit einem magischen Namen eingerichtet. Zum Beispiel hier ein Ausschnitt aus der Zone der Domain {{{bellut.net}}} {{{ garfield IN CNAME garfield.prima-dyn.de. _acme-challenge.garfield 600 IN CNAME d716b142-fe8a-4095-a854-c773e9b7d064.acme-dns.ping.de. }}} Der Server, für den das Zertifikat ausgestellt werden soll ist {{{garfield.bellut.net}}}, der magische Name ist dann {{{_acme-challenge.garfield.bellut.net}}}. Dieser wird als CNAME auf die im vorigen Schritt erzeugten ACME-DNS-Domain angelegt. Die niedrige TTL von 600 ist hier nicht zwingend nötig, aber doch hilfreich, sollte es notwendig werden, einen neuen ACME-DNS-Account zu registrieren, z.B. wenn man den Usernamen oder Passwort vergessen hat. == Let's Encrypt == Die Clients haben unterschiedliche Konfigurations-Methoden, als Beispiel hier die Konfiguration von {{{acme.sh}}}. {{{ export ACMEDNS_UPDATE_URL="https://acme-dns.ping.de/update" export ACMEDNS_USERNAME="eaed401c-ae16-431a-8394-a7700fdb03aa" export ACMEDNS_PASSWORD="o9kIYZfRA4se4iY_GYlGOU9DXMsKvK70s0kjRP82" export ACMEDNS_SUBDOMAIN="d716b142-fe8a-4095-a854-c773e9b7d064" ./acme.sh --issue --dns dns_acmedns -d garfield.bellut.net }}} Der Client sollte dann automatisch das Token von Let's Encrypt holen, über die API an den ACME-DNS-Server schicken und dann das Zertifikat von Let's Encrypt anholen. Das Zertifikat kann dann wie gewohnt benutzt werden oder es wird ein Client eingesetzt, der dieses automatisch installiert. = FAQ = 1. Bei der ersten Einrichtung muss natürlich die TTL der DNS-Zone abgewartet werden, bis der CNAME überall bekannt ist. Let's Encrypt hat nicht öffentlich Dokumentiert, welcher Server von ihrem Service genutzt wird, eine zeitliche Korrelation deutet aber auf den öffentlichen Google-Server 8.8.8.8 hin. Von Let's Encrypt kommen teilweise unverständliche Fehlermeldungen zurück, im Zweifel einfach 24 Stunden später nochmals versuchen. 1. Der Betreiber des ACME-DNS-Servers (hier die PING-Admins) ist technisch in der Lage, für alle dort registrierten (und auch benutzten) Domains Zertifikate zu erzeugen. 1. Der ACME-DNS-Server benutzt selbst Let's Encrypt für die HTTPS-API und erneuert das Zertifikat selbstständig. = Links = * https://letsencrypt.org/docs/challenge-types/ * https://github.com/joohoi/acme-dns * https://github.com/acmesh-official/acme.sh |