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

Teile diesen Beitrag
Christian

Categories:

9 Kommentare

  1. 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

  2. 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?

  3. 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?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.