Zum Inhalt
Bytearium

Keine Werbung und keine Partnerlinks aktiv

Netzwerke

DNS-01-Challenge (ACME)

Die DNS-01-Challenge beweist per TXT-Eintrag _acme-challenge, dass dir eine Domain gehört: Wildcard-Zertifikate ohne offenen Port, aber mit API-Token.

Dieser Eintrag liegt noch unter unserer Mindestlatte für den Suchindex (Umfang und Zahl der Quellen) und wird überarbeitet. Er ist deshalb nicht in Suchmaschinen gelistet.

Du willst ein gültiges HTTPS-Zertifikat für einen Dienst, den aus dem Internet niemand erreichen soll. DNS-01 beweist, dass dir die Domain gehört, ohne einen einzigen Port zu öffnen.

Kurz gesagt

Die DNS-01-Challenge ist ein Weg, die Kontrolle über einen Domainnamen in ACME nachzuweisen, dem Protokoll, mit dem Let’s Encrypt und andere Zertifizierungsstellen Zertifikate automatisch ausstellen (RFC 8555) [1]. Dein ACME-Client legt einen TXT-Eintrag unter _acme-challenge.<deine Domain> an, und die Zertifizierungsstelle fragt ihn im öffentlichen DNS ab [1][2]. Von den Prüfverfahren HTTP-01, DNS-01 und TLS-ALPN-01 bei Let’s Encrypt taugt nur DNS-01 für Wildcard-Zertifikate, und es funktioniert auch für Namen, deren Webserver nicht im Internet stehen [2]. Unsere Einschätzung: DNS-01 ist für interne Dienste im Homelab die richtige Wahl, solange du den DNS-API-Schlüssel schützt, der dazugehört.

So funktioniert’s

  1. Der Name des Eintrags. Der Client bildet den Prüfnamen, indem er das Label _acme-challenge vor die zu prüfende Domain setzt [1].
  2. Der Wert des Eintrags. Der Wert leitet sich aus dem Token der Zertifizierungsstelle und deinem ACME-Kontoschlüssel ab; RFC 8555 legt ihn als base64url-kodierten SHA-256-Hash dieser „Key Authorization“ fest [1][2].
  3. Die Prüfung. Sobald der Client meldet, dass der Eintrag steht, fragt Let’s Encrypt das DNS ab; passt der Wert, kann das Zertifikat ausgestellt werden [2]. Mehrere TXT-Einträge unter demselben Namen sind erlaubt, etwa wenn eine Wildcard und ein normaler Name zusammen geprüft werden, aber alte solltest du entfernen, weil Let’s Encrypt zu große Antworten ablehnt [2].
  4. Automatik braucht eine API. Laut Let’s Encrypt ist DNS-01 nur sinnvoll, wenn dein DNS-Anbieter eine API für automatische Änderungen hat, und ohne Prüfung der Verteilung sollte ein Client lange genug warten, oft bis zu einer Stunde, bevor er die Prüfung auslöst [2].
  5. Der Schlüssel ist das Risiko. Volle DNS-API-Zugangsdaten auf einem Webserver vergrößern den Schaden deutlich, wenn dieser Server gehackt wird. Let’s Encrypt empfiehlt eng begrenzte Zugangsdaten oder die Prüfung auf einem eigenen Rechner, der die Zertifikate dann weiterkopiert [2].
  6. Delegation hilft. Let’s Encrypt folgt bei DNS-01 CNAME- und NS-Einträgen, du kannst _acme-challenge also auf eine eigene Zone zeigen lassen, die nur der Prüfung dient [2].
  7. Weiter absichern. Ein CAA-Eintrag nennt die Zertifizierungsstellen, die für deine Domain ausstellen dürfen; mit dem Parameter validationmethods beschränkst du Let’s Encrypt zum Beispiel auf dns-01 [3][4].

Ein Praxisbeispiel

Du willst nas.example.com im Heimnetz mit gültigem Zertifikat betreiben, ohne Port 80 weiterzuleiten. Dein ACME-Client (im Reverse Proxy oder als eigenes Werkzeug) bekommt einen API-Token, der nur TXT-Einträge in deiner Zone ändern darf, legt den Challenge-Eintrag an und wartet, bis er verteilt ist. Währenddessen prüfst du, was das öffentliche DNS liefert:

dig +short TXT _acme-challenge.nas.example.com

Zeigt die Antwort den erwarteten Wert, kann die Prüfung gelingen [1][2]. Danach beschränkt ein CAA-Eintrag wie example.com. CAA 0 issue "letsencrypt.org; validationmethods=dns-01" die Ausstellung auf diese Methode [3]. Der Name nas.example.com ist ein ausgedachtes Beispiel und keiner unserer Hosts.

Prüfliste

  • Prüfe, ob dein DNS-Anbieter eine API anbietet, bevor du dich für DNS-01 entscheidest [2].
  • Erstelle einen API-Token mit den engsten Rechten, die dein Anbieter erlaubt, und lege ihn nie in ein Repository [2].
  • Delegiere _acme-challenge per CNAME an eine eigene Zone, wenn dein Anbieter Tokens nicht eingrenzen kann [2].
  • Gib deinem Client genug Wartezeit für die Verteilung, bevor er die Prüfung auslöst [2].
  • Räume alte _acme-challenge-TXT-Einträge auf [2].
  • Lege einen CAA-Eintrag an, der deine Zertifizierungsstelle und auf Wunsch die Prüfmethode nennt [3][4].

Primärquellen

Diese Quellen sind die Grundlage der Seite. Das heißt nicht, dass jede Aussage einzeln nachgeprüft wurde; ob ein Prüfbeleg vorliegt, steht oben unter „Stand“. Einordnung und Prüfliste sind unsere eigene Arbeit.

Für diese Fassung liegt noch kein dokumentierter Prüfbeleg vor. Der Text stützt sich auf die genannten Quellen.

Entstehung: Bytearium erstellt diese Seiten mit Unterstützung von KI und verantwortet die Veröffentlichung. KI kann sich irren, deshalb nennen wir Quellen und Prüfstand offen.

  1. IETFRFC 8555: Automatic Certificate Management Environment (ACME)
  2. Let's EncryptChallenge Types
  3. Let's EncryptCertification Authority Authorization (CAA)
  4. IETFRFC 8657: Certification Authority Authorization (CAA) Record Extensions for Account URI and Automatic Certificate Management Environment (ACME) Method Binding

Auf dieser Seite gibt es keine Werbung und keine Partnerlinks.