· DevOps · 3 Min. Lesezeit
Wildcard-Zertifikate mit Traefik und DNS-01, und die Fallen dabei
Ein Wildcard-Zertifikat für viele Subdomains auf einer IP, ausgestellt per DNS-01. Wie ich das mit Traefik löse und welche vier Stolpersteine mich dabei Zeit gekostet haben.

Wer viele Subdomains auf einer IP betreibt, will nicht für jede ein eigenes Zertifikat über Port 80 ausstellen. Ein Wildcard-Zertifikat für *.example.de löst das, aber Wildcards gehen nur über die DNS-01-Prüfung, nicht über HTTP-01. Ich zeige hier zuerst, wie ich das mit Traefik einrichte, und danach die vier Fallen, die dabei aufgetaucht sind. Wer die HTTP-01-Grundlagen sucht, findet sie im Beitrag Zertifikate mit Traefik und Let’s Encrypt.
Schritt 1: DNS-01 statt HTTP-01 einrichten
Bei DNS-01 weist man den Besitz der Domain nach, indem der ACME-Client einen TXT-Eintrag setzt, statt eine Datei über HTTP auszuliefern. Traefik macht das über einen DNS-Resolver, der die API des DNS-Providers mit einem Token anspricht. Die Details zur DNS-01-Challenge und den unterstützten Providern stehen in der Traefik-Doku zu Certificate Resolvers.
Wichtig ist, die Domains explizit zu deklarieren, damit das Wildcard und die nackte Domain im selben Zertifikat landen. Der Router bekommt dazu den certresolver und die domains-Einträge mit main und sans:
- "traefik.http.routers.app.tls.certresolver=dns"
- "traefik.http.routers.app.tls.domains[0].main=*.example.de"
- "traefik.http.routers.app.tls.domains[0].sans=example.de"Der API-Token gehört in eine Umgebungsvariable, nicht in die Labels und nicht ins Git. Damit steht das Grundgerüst - alles Weitere sind die Stolpersteine, die mich beim Betrieb Zeit gekostet haben.
Falle 1: HostRegexp erzeugt keine SNI-Route
Ein Router, der seine Hosts nur über HostRegexp matcht, bekommt bei HTTPS keine saubere SNI-Zuordnung und fällt in den TCP-Catchall, der Client sieht einen Connection-Reset. Die Lösung ist, jeden real genutzten Host zusätzlich als konkretes Host() zu deklarieren. Das Regexp taugt als Fangnetz, aber die echten Hosts müssen namentlich da sein. Wie Traefik diese Matcher auswertet, steht in der Doku zu Rules and Priority.
Falle 2: das Restart-Race bei der DNS-Challenge
Startet Traefik neu, während gerade eine DNS-01-Challenge läuft, will es denselben TXT-Eintrag noch einmal setzen und die Provider-API antwortet mit duplicate value. Der Ausweg ist Geduld: warten, bis der _acme-challenge-TXT wieder verschwunden ist, dann neu starten. Ein Neustart mitten in der Challenge ist die häufigste Ursache für scheinbar kaputte Resolver.
Falle 3: unbekannte SNI sauber verwerfen
Damit fremde oder falsch geroutete Anfragen nicht in einem Default-Zertifikat oder einem 404 landen, setze ich einen TCP-Catchall mit niedrigster Priorität, der unbekannte SNI schon im Handshake verwirft. Wer die Domain nicht kennt, kommt gar nicht erst durch.
Falle 4: Prioritäten bei Redirects
Wenn ein Redirect-Router und der Quell-Router dieselbe Domain betreffen, muss der Redirect eine höhere Priorität haben, sonst greift die Quelle zuerst und der Redirect läuft ins Leere. Ich vergebe darum bewusste, gestaffelte Prioritäten, statt mich auf die Auto-Priorität nach Regel-Länge zu verlassen. Wie diese Auto-Priorität zustande kommt, ist ebenfalls in der Doku zu Rules and Priority beschrieben.
Ehrlich: Was DNS-01 voraussetzt
DNS-01 braucht API-Zugriff auf Ihre DNS-Zone. Wer seinen DNS bei einem Provider ohne brauchbare API hat, kann kein Wildcard automatisieren und bleibt bei HTTP-01 pro Host. Und ein API-Token für die DNS-Zone ist ein mächtiges Geheimnis, es gehört eng begrenzt und sauber verwahrt.
Sie betreiben mehrere Dienste hinter einem Reverse Proxy und wollen TLS sauber automatisieren? Ich baue Reverse-Proxy- und Zertifikats-Setups, die ohne manuelles Nachfassen laufen. Mehr unter Infrastruktur & Cloud, das Erstgespräch ist unverbindlich.

Alex Jabi
Ich betreue IT, Informationssicherheit und Datenschutz für KMU und Praxen an der Bergstraße und im Odenwald, persönlich, dokumentiert und ohne Cloud-Zwang.
Mehr über mich



