Guess I should quickly explain why someone would want to mess with bad SSL certificates. I mean, it sounds insecure as hell and you are right if you’re shaking your head. But sadly there are applications unable to deliver good certificates or exchange them. Best example is Ubnt and their controller for their software. They still don’t make it easy to exchange the bad certificates.
As that controller runs in a docker container here, it’s pretty logical to do a certificate replacement by proxying the web interface through Traefik. I mean, it’s GA Version is 2.0 – so what could possibly go wrong? Here’s the compose passage:
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
And now this is where stuff breaks: traefik 2.0 seems to have a problem ignoring SSL certificates validity. As a temp. workaround you may want to jump the new 2.1 train which is available as release candidate. Looking through the bug list on Github, this issue was reported quite a while ago.
The matching error message as seen in the 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
Oliver says:
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
ToeiRei says:
Mein traefik macht hier ohne Probleme SNI – Du schreibst hier auch von einem Apache… Das ist bisschen verwirrend. Kannst du dein Setup genauer beschreiben?
Oliver says:
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
ToeiRei says:
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.
Clayp says:
Hast du in deiner traefik config “insecureSkipVerify: true” gesetzt oder wie genau ignorierst du Validität des SSL Zertifikats?
ToeiRei says:
Richtig erkannt. Alternativ kann man auch das Zertifikat – sofern es irgendwie valide ist (Nicht abgelaufen, Hostname passend)- als Trusted ins System einbauen…