Hier zeige ich euch, wie ihr in Traefik 2 Wildcard (Stern) Zertifikate nutzen bzw. erstellen könnt.
Diese Anleitung setzt voraus, dass ihr bereits Traefik installiert sowie konfiguriert habt. Sollte dies nicht der Fall sein, so könnt ihr es mit dieser Anleitung tun.
1. Voraussetzungen
Bei diesem Verfahren muss euer DNS Provider mitspielen. Hier gibt es eine Liste von DNS Providern, bei denen es funktioniert.
Für jeden DNS Provider sind die Parameter etwas anders. Die genauen Parameter könnt ihr jeweils hier nachlesen. In dieser Anleitung zeige ich den Prozess am Beispiel von netcup.de.
1.1 API Key anfordern
Wenn ihr netcup als DNS Provider habt, dann könnt ihr hier nachlesen, wie ihr an euren API Key kommt.
1.2 DNS Server des Providers ermitteln
Wenn ihr bei netcup seid, dann könnt ihr hier die beiden DNS Server herausfinden.
2. Traefik Docker Compose anpassen
Ihr geht nun also in eure Docker Compose Datei von Traefik.
nano /opt/containers/traefik/docker-compose.yml
Beim Provider Netcup fügt ihr folgende Zeilen hinzu:
environment:
- NETCUP_CUSTOMER_NUMBER=xxx
- NETCUP_API_KEY=xxx
- NETCUP_API_PASSWORD=xxxxx
labels:
- "traefik.http.routers.traefik-secure.tls.certresolver=netcup"
- "traefik.http.routers.traefik-secure.tls.domains[0].main=euredomain.de"
- "traefik.http.routers.traefik-secure.tls.domains[0].sans=*.euredomain.de"
Code-Sprache: JavaScript (javascript)
Nachfolgend seht ihr meine komplette Docker Compose Datei. Diese setzt sich aus dieser und dieser Anleitung zusammen.
version: '3'
services:
traefik:
image: traefik:v2.1
container_name: traefik
restart: unless-stopped
security_opt:
- no-new-privileges:true
networks:
- proxy
ports:
- 80:80
- 443:443
volumes:
- /etc/localtime:/etc/localtime:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/traefik.yml:ro
- ./data/dynamic_conf.yml:/dynamic_conf.yml
- ./data/acme.json:/acme.json
environment:
- NETCUP_CUSTOMER_NUMBER=xxx
- NETCUP_API_KEY=xxxx
- NETCUP_API_PASSWORD=xxx
labels:
- "traefik.enable=true"
- "traefik.http.routers.traefik.entrypoints=http"
- "traefik.http.routers.traefik.rule=Host(`traefik.euredomain.de`)"
- "traefik.http.middlewares.traefik-auth.basicauth.users=user:xxxx"
- "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
- "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
- "traefik.http.routers.traefik-secure.entrypoints=https"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.euredomain.de`)"
- "traefik.http.routers.traefik-secure.middlewares=traefik-auth"
- "traefik.http.routers.traefik-secure.tls=true"
- "traefik.http.routers.traefik-secure.tls.certresolver=netcup"
- "traefik.http.routers.traefik-secure.tls.domains[0].main=euredomain.de"
- "traefik.http.routers.traefik-secure.tls.domains[0].sans=*.euredomain.de"
- "traefik.http.routers.traefik-secure.service=api@internal"
- "providers.file.filename=/dynamic_conf.yml"
networks:
proxy:
external: trueCode-Sprache: PHP (php)
Notwendige Anpassungen
- Ihr müsst unter “environment” die Parameter bezüglich eurem DNS Provider anpassen.
- Unter “labels” müsst ihr den Namen eures Providers hinschreiben
3. traefik.yml anpassen
Nun müssen wir noch die Datei traefik.yml anpassen.
nano /opt/containers/traefik/data/traefik.yml
Meine sieht so aus:
api:
dashboard: true
entryPoints:
http:
address: ":80"
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
file:
filename: "/dynamic_conf.yml"
certificatesResolvers:
netcup:
acme:
email: eure@email.de
storage: acme.json
dnsChallenge:
provider: netcup
delayBeforeCheck: 900
resolvers:
- "root-dns.netcup.net"
- "second-dns.netcup.net"Code-Sprache: JavaScript (javascript)
Notwendige Anpassungen
- E-Mail Adresse anpassen
- Provider Name anpassen
- DNS Resolver eures Providers verwenden
4. Alte acme.json löschen
Nun löschen wir unsere bisherigen von Traefik erstellten Zertifikate.
rm /opt/containers/traefik/data/acme.json
Anschließend erstellen wir diese Datei wieder:
touch /opt/containers/traefik/data/acme.json
chmod 600 /opt/containers/traefik/data/acme.json
5. Traefik neu starten
Traefik startet ihr wie gewohnt mit “docker-compose up” neu. Wenn ihr Traefik nun startet, sollte ein Wildcard Zertifikat erzeugt werden.
6. Testen
Ihr könnt euch bei Traefik einloggen und anschauen, welches Zertifikat Verwendet wird.
7. Bisherige Services anpassen
Wenn dies funktioniert hat, dann müsst ihr noch eure bisherigen Services anpassen. Bisher stand bei mir immer folgende Zeile in den Anleitungen:
- "traefik.http.routers.web-secure.tls.certresolver=http"Code-Sprache: JavaScript (javascript)
Diese Zeile müsst ihr aus den Docker Compose Dateien der anderen Dienste entfernen.
8. Quellen
https://medium.com/@containeroo/traefik-2-0-wildcard-lets-encrypt-certificates-1658370adc68


Hallo Christian,
wird die Anleitung für die „Traefik V3 Installation, Konfiguration und CrowdSec-Security“ noch angepasst?
Vielen Dank im Voraus 🙂
Interessant an dieser Stelle wäre vielleicht noch folgender Aspekt, wenn man in Traefik Domains mit unterschiedlicher Herkunft einrichten möchte. In meinem Fall ist das z. B.
Mein ursprünglicher Gedanke, einfach einen zweiten CertResolver unter den ersten zu hängen, ist sicherlich etwas zu kurz gedacht, oder?
Sähe dann also so aus:
certificatesResolvers: netcup: acme: email: eure@email.de storage: acme.json dnsChallenge: provider: netcup delayBeforeCheck: 900 resolvers: - "root-dns.netcup.net" - "second-dns.netcup.net" certificatesResolvers: cloudflare: acme: email: eure@email.de storage: acmeCloudflare.json dnsChallenge: provider: cloudflare delayBeforeCheck: 900 resolvers: - "1.1.1.1" - "1.0.0.1"Gibt es vielleicht jemanden, der es so in Verwendung hat?
Hab leider keine Testumgebung frei, sodass ich es einfach mal selbst testen kann.
Funktioniert das im Jahr 2022 noch?
Ich hab es jetzt unzählige Male versucht, reinzureichen. Mal auf Ubuntu 22.04, dann 20.04, dann auf Debian 11… nichts funktioniert.
In der ACME.JSON steht immer als letztes „Certificates: Null“. Beim Zertifikat für eine Subdomain würde da dann Key und CERT aufgelistet werden. In den DNS Einstellungen wird kurz nach dem Docker-compose up … auch der TXT für die acme_challenge angezeigt.
Dennoch scheint irgendwie kein Zertifikat abgerufen werden zu können. Safari, Firefox, Edge melden immer irgendeinen SSL-Fehler. Selbst nach dem löschen aller Browserdaten (Cookies, Verlauf usw.)
Domain(s) und Rootserver sind alle direct bei Netcup.
Daher stell ich mir grade die Frage, ob Netcup das Ganze überhaupt noch unterstützt und anbietet?
Was muss man bei:
resolvers:
– “root-dns.netcup.net”
– “second-dns.netcup.net”
eintragen wenn man seine Domain bei netcup hat?
Beim Link hab ich folgende Angaben gefunden:
Nameserver
Bitte verwenden Sie auf allen vServern folgende Nameserver zur Namensauflösung.
In den meisten Distributionen werden die Nameserver in der Datei “/etc/resolv.conf” definiert:
nameserver 46.38.225.230
nameserver 46.38.252.230
Für IPv6 verwenden Sie die folgenden Nameserver:
nameserver 2a03:4000:0:1::e1e6
nameserver 2a03:4000:8000::fce6
was davon muss nun wie oben eingesetzt werden?