traefik 2.0 und unsichere SSL Zertifikate

Erstmal sollte ich vielleicht erklären, warum man sich mit ungültigen Zertifikaten herumschlagen möchte. Das mag auf den ersten Blick zwar Pervers wie nur was erscheinen, aber es gibt in der Tat Webanwendungen, die nicht im Stande sind, korrekte SSL Zertifikate auszuliefern. Ein Paradebeispiel dafür ist der Controller von Ubiquiti, wo es ein ziemlich steiler Akt wäre, dort herumzustochern.

Da bei mir der Controller als Docker-Container läuft, war für mich der nächste logische Schritt, das Zertifikat durch einen Reverse-Proxy für mich auszutauschen. Traefik bietet sich da sehr gut an und steht als Draufgabe sogar in Version 2.0 als GA zur Verfügung. Eine passende docker-compose Passage würde so aussehen:

services:
unifi:
image: linuxserver/unifi-controller
restart: unless-stopped
ports:
- "3478:3478/udp"
- "10001:10001/udp"
- "6789:6789"
- "8080:8080"
- "8880:8880"
- "8443:8443"
- "8843:8843"
networks:
- traefik_proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.unifi.rule=Host(`${UNIFI_HOSTNAME}`)"
- "traefik.http.routers.unifi.entrypoints=http"
- "traefik.http.middlewares.unifi.redirectscheme.scheme=https"

- "traefik.http.routers.unifi-secure.rule=Host(`${UNIFI_HOSTNAME}`)"
- "traefik.http.routers.unifi-secure.entryPoints=https"
- "traefik.http.routers.unifi-secure.tls=true"
- "traefik.http.services.unifi-secure.loadbalancer.server.port=8443"
- "traefik.http.services.unifi-secure.loadbalancer.server.scheme=https"

environment:
- TZ="Europe/Vienna"
volumes:
- type: volume
source: unifi_data
target: /config
volume:
nocopy: true

Und genau da patzt dann traefik 2.0 mit dem Ignorieren der Validität des SSL Zertifikats, sodass man gezwungen ist, auf die nächste Version 2.1 auszuweichen, welche noch nicht offiziell released wurde. Bugs dieser Funktion scheinen aber – sofern man Github Issues trauen kann – vor einer geraumen Weile gemeldet worden sein.

Die passende Fehlermeldung dazu findet sich im Debug Log:

‚500 Internal Server Error‘ caused by: x509: cannot validate certificate for 172.21.0.2 because it doesn’t contain any IP SANs

Author:

6 thoughts on “traefik 2.0 und unsichere SSL Zertifikate”

  • Moins ;-)

    Da mal eine Frage ;-) Ich habe als Backend-Service einen Apache auf Port 443… bekomme hier allerdings dann:
    Server name not provided via TLS extension
    Hmmm, hört sich so an als wenn der Traefik da kein SNI kann.
    Haste ’ne Idee?
    LG aus Köln,

    Olli

  • Mein traefik macht hier ohne Probleme SNI – Du schreibst hier auch von einem Apache… Das ist bisschen verwirrend. Kannst du dein Setup genauer beschreiben?

  • Hi,

    der relevante Teil ist:

    deploy:
    labels:
    – traefik.http.routers.60113068-443.entrypoints=web-secure
    – traefik.http.routers.60113068-443.rule=HostRegexp(`{subdomain:(.*\.)?}exampledomain.de`)
    – traefik.http.routers.60113068-443.tls=true
    – traefik.http.routers.60113068-443.tls.options=default
    – traefik.http.routers.60113068-443.service=60113068-443@docker
    – traefik.http.middlewares.60113068-443.redirectscheme.scheme=https
    – traefik.http.services.60113068-443.loadbalancer.server.scheme=https
    – traefik.http.services.60113068-443.loadbalancer.server.port=443

    – traefik.http.routers.60113068-80.entrypoints=web
    – traefik.http.routers.60113068-80.rule=HostRegexp(`{subdomain:(.*\.)?}example-domain.de`)
    – traefik.http.routers.60113068-80.service=60113068-80@docker
    – traefik.http.services.60113068-80.loadbalancer.server.port=80

    auf 443 / 80 lauscht ein Apache2, in meinem Fall mit „richtigen“ Cert.

    Errolog hat dann das hier:

    AH02645: Server name not provided via TLS extension (using default/first virtual host)

    Vielleicht haste eine Idee… kann man Dich noch auf anderen Kanälen erreichen?

    LG aus Köln, Oliver

  • Ich schätze mal, du hast ein ähnliches Setup wie ich.

    Der Apache wird wohl von draußen erreichbar sein während intern der Traefik seinen Dienst verrichtet – Ich für meinen Teil habe halt statt dem Apache einen Nginx hier und lass den Nginx direkt auf meine Dienste, die ich von Außen erreichbar benötige als Reverse Proxy drauf.

    Laut der Fehlermeldung versuchst du SNI zu machen und gibst dem Traefik keinen Hostnamen mit.

  • Hast du in deiner traefik config „insecureSkipVerify: true“ gesetzt oder wie genau ignorierst du Validität des SSL Zertifikats?

  • Richtig erkannt. Alternativ kann man auch das Zertifikat – sofern es irgendwie valide ist (Nicht abgelaufen, Hostname passend)- als Trusted ins System einbauen…

Schreibe einen Kommentar

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