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"
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: true
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 resolvers: - "root-dns.netcup.net" - "second-dns.netcup.net"
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"
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
- Raspberry Pi – Remote Desktop aktivieren - 14. Januar 2021
- Big Blue Button – mit Docker und Traefik installieren - 13. Januar 2021
- Big Blue Button – mit Docker unter Debian 10 installieren - 13. Januar 2021
14 Kommentare
Hallo,
vielen Dank für den Artikel. Nach Anregung der ct‘ habe ich heute versucht, ein Wildcard-Zertifikat einzurichten. Mein Server wird von Netcup gehostet, daher hat mir Ihr Artikel sehr weitergeholfen.
Allerdings hat es nicht geklappt. Haben Sie einen Domain-Reseller-Vertrag mit Netcup abgeschlossen? Ich habe gelesen, dass das Voraussetzung zu Nutzung der API ist.
Hallo,
ich bin ein „normaler“ Kunde. Habe keine Verträge zu netcup oder sonstiges.
Müsste über das Netcup CPP gehen. Link zur Netcup CCP Anleitung befindet sich im Artikel.
LG
Christian
Hallo,
die Api von Netcup funktioniert wohl, ich finde anschließend Texteinträge im DNS. In die Datei acme.json werden ebenfalls Einträge vorgenommen, das Zertifikat wird aber leider nicht eingetragen. Ich habe es jetzt aufgegeben, das Anlegen einzelner Zertifikate funktioniert sehr gut und reicht mir auch.
Vielen Dank für die sehr informative Website mit vielen hilfreichen Tipps, einiges davon habe ich bereits nutzen können.
LG
Walter
Bei mir hat es geholfen einen Delay im acme check hinzuzufügen da die DNS Server von Netcup wohl zu langsam sind. In der traefik.yml einfach ein delayBeforeCheck einfügen.
provider: netcup
delayBeforeCheck: 900
resolvers:
Danke für den Hinweis 🙂
Hallo Christian,
irgendwie will es nicht funktionieren mit Wildcard (Stern) Zertifikaten. Nutze ebenso netcup und die von dir beschriebene Standardvariante plus HTTPS-Verschlüsselung verbessern funktioniert einwandfrei. Wenn jetzt die oben beschrieben Anpassungen gemacht werden erscheint beim aufrufen von Traefik:
– SSL_ERROR_INTERNAL_ERROR_ALERT
Habe dann Treafik mal komplett gelöscht und nochmal nach o.g. Anleitung installiert ohne die dynamic_conf.yml zu definieren. Zugriff auf Traefik, Jitsi, WordPress etc gelingt, allerdings kommt unter Error code: MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT.
Hast du eine Idee woran das liegen könnte? Wie ist deine dynamic_conf.yml konfiguriert?
Gibt es hierzu mittlerweile eine Lösung? Bei mir das gleiche Problem!
Hallo,
ich laufe auf den selben Fehler.
Es liegt aber meines Wissens nach nicht an der dynamic_conf.yml.
Der Fehler „MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT“ kommt, da er ein default Traefik Zertifikat verwendet und dies nicht von Mozilla angenommen wird.
Die Zertifikate setzt er bei mir ein, da er anscheinend nicht mit der API kommunizieren kann oder meine Domain nicht gefunden wird. Leider ferstehe ich nicht ganz was die nachfolgende meldung mir sagen möchte.
Unable to obtain ACME certificate for domains \“default.de,*.default.de\“ : unable to generate a certificate for the domains [default.de *.default.de]: error: one or more domains had a problem:\n[*.default.de] [*.default.de] acme: error presenting token: netcup: failed to find DNSZone, unexpected response code ‚REFUSED‘ for _acme-challenge.default.de.\n[default.de] [default.de] acme: error presenting token: netcup: failed to find DNSZone, unexpected response code ‚REFUSED‘ for _acme-challenge.default.de.\n“ providerName=netcup.acme
Vieleicht weiß hier einer was bei mir der Fehler ist.
Meine Domain habe ich bei Netcup gekauft, aber meine Server betreibe ich selber.
Hey Christian,
top Anleitung, konnte ich gut als Grundlage nehmen.
Vielen Dank dafür.
Beste Grüße
Felix
Würde das auch funktionieren, wenn man keine eigene Domain hat, sondern eine von Netcup bereitgestellte Subdomain (xxxxxxxx.happysrv.de)? Ich erhalte da immer entsprechende Fehlermeldung, weil ich nicht Besitzer dieser Domain (happysrv.de) bin. Wie kann ich mittels Traefik verschlüsseln?
Ich nutze aktuell deine Tutorials um mir das ganze Grundlegend einzurichten. Meine Reihenfolge war:
1. Docker & Compose installieren
2. Traefik installieren
3. HTTP Challenge auf DNS Challenge mit Hetzner Provider
Hierbei bin ich beim starten des Containers auf folgenden Fehler getreten:
„the router traefik-secure@docker uses a non-existent resolver: hetzner“
Allerdings ist die Environment Variable für den API gesetzt, der http Resolver wurde auf hetzner geändert und in der traefik.toml hab ich ebenfalls die Daten alle angepasst.
Anschließend hab ich den Container gestoppt, die acme.json gelöscht, neu erstellt und die Permissions vergeben.
Beim Starten an dieser Stelle ist der Fehler aufgetreten.
Ich verweise auf folgendes GitHub Issue, was deinen Schritt mit dem löschen der acme.json das Setup unbrauchbar macht:
https://github.com/traefik/traefik/issues/7414
Hast du da zufällig ’ne Lösung parat? 😀
Ebenfalls würde mich interessieren wo plötzlich bei dir in der docker-compose.yml folgendes herkommt:
[…]
– „providers.file.filename=/dynamic_conf.yml“
[…]
– ./data/dynamic_conf.yml:/dynamic_conf.yml
[…]
Und in der traefik.toml:
[…]
file:
filename: „/dynamic_conf.yml“
[…]
Dies kommt im vorherigen Setup nicht vor und wird auch nirgends erwähnt.
und bezüglich folgender Zeilen:
[…]
– „traefik.http.routers.traefik-secure.tls.domains[0].main=euredomain.de“
– „traefik.http.routers.traefik-secure.tls.domains[0].sans=*.euredomain.de“
[…]
Hier wähle ich dann ja die Domain die ich quasi als Host nutze? Wenn also der hostname des Servers srv01.domain.tld ist nutze ich hier domain.tld und *.domain.tld? Inwiefern beeinflusst dies später die Konfiguration von mailcow welches sich ja die Zertifikate selber zieht? Und wie sieht es mit weiteren Domains aus, welche in mailcow konfiguriert sind (Multi Domain Setup)? Denn dort muss ich ja die SANS alle angeben, die im Zertifikat enthalten sein sollen, also z.B. *.domain.tld, *.domain2.tld, *.domain3.tld
– „traefik.http.routers.web-secure.tls.certresolver=http“ entfernen dann neustarten.
Hat bei mir problemlos funktionert.
Hatte auch die ganze Zeit Fehler.