1. #1

    Registriert seit
    19.11.2022
    Beiträge
    5
    Thanked 4 Times in 4 Posts

    Beitrag Traefik proxy - TLS handshake error

    Hallo,

    ich versuche gerade das, was im Video "Traefik auf Server/Raspberry Pi installieren und einrichten: Reverse Proxy für Docker mit Let’s Encrypt HTTPS-Zertifikaten" gezeigt wird, einmal nachzubauen.
    Leider funktioniert das bei mir nicht - es kommt im Logfile folgende Fehlermeldung:

    time="2023-01-09T14:55:48Z" level=debug msg="Serving default certificate for request: "site1.myserver.de""
    time="2023-01-09T14:55:48Z" level=debug msg="http: TLS handshake error from 192.168.32.1:36678: remote error: tls: bad certificate"


    Ich habe schon alles genauestens geprüft, finde aber leider nicht die Ursache. Die ACME-Datei liegt in .\letsencrypt\ und hat 0 Bytes. Ich vermute, da ist irgendwo die Ursache zu suchen. CHMOD 600 habe ich auf die Datei gesetzt.

    Hat jemand eine Idee, wonach ich gucken kann, um das Problem zu lösen?

    Hier noch die weiteren relevanten Dateien:

    docker-compose.yml
    Code:
    version: '3'
    
    services:
      traefik:
        image: traefik:v2.9
        container_name: 001-traefik
        command:
          - "--providers.file.filename=/traefik.yml"
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - /var/run/docker.sock:/var/run/docker.sock:ro
          - ./letsencrypt:/letsencrypt
          - ./traefik.yml:/traefik.yml
        networks:
          - web
    
    networks:
      web:
        name: traefik_web
    traefik.yml
    Code:
    log:
      level: TRACE
    
    providers:
      docker:
        exposedByDefault: false
        network: traefik_web
    
    entryPoints:
      http:
        address: ":80"
        http:
          redirections:
            entryPoint:
              to: "https"
              scheme: "https"
      https:
        address: ":443"
        http:
          tls:
            certResolver: le
    
    certificatesResolvers:
      le:
        acme:
          tlschallenge: true
          email: "meine@email.de"
          storage: "/letsencrypt/acme.json"
    ./nginx-demo/docker-compose.yml
    Code:
    services:
      nginx:
        image: nginx:latest
        container_name: 002-nginx
        labels:
          - "traefik.enable=true"
          - "traefik.http.routers.nginx.rule=Host(`site1.myserver.de`)"
        networks:
          - traefik_web
    
    networks:
      traefik_web:
        external: true

  2. The Following User Says Thank You to olafk.de For This Useful Post:

    DotNet (12.01.2023)

  3. #2
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    5.261
    Thanked 8.997 Times in 2.897 Posts
    Blog Entries
    5

    Standard AW: Traefik proxy - TLS handshake error

    Hi,
    an deinem Traefik-Log fehlt vieles, mit log.level TRACE müsste weit mehr rein geschrieben werden. Vor allem nachdem der Nginx-Container zum ersten Mal gestartet wird, generiert er sich eine neue Zertifikatsanfrage und lässt die per ACME von Let's Encrypt signieren. Hast du den Rest vom Log abgeschnitten? Schau mal dein komplettes Log durch oder Poste es hier. Das log.level scheint ja grundsätzlich zu greifen, wenn Debug-Einträge dort auftauchen. Interessant ist vor allem dem Traefik Log zu folgen, dann in einem zweiten Tab den Nginx Container zu starten. Dann müsste man recht ausführlich sehen, was er da versucht und wo es klemmt.

    Übrigens: Für die docker-compose.yml von Traefik hast du eine Version angegeben. Das habe ich im Artikel bewusst nicht getan, da es schon länger veraltet ist. Bei Compose V1 brachte es ohne Swarm keinen Mehrwert (eher im Gegenteil), in V2 wird es ignoriert, da nicht Teil der Spezifikation. Sollte daher keine Probleme verursachen, zumindest sind mir keine bekannt. Würde ich dennoch entfernen, gerade wenn etwas nicht richtig funktioniert. Es gibt Konstellationen, in denen Dinge Probleme verursachen können, die es außerhalb davon nicht tun.

    Zitat Zitat von olafk.de Beitrag anzeigen
    Die ACME-Datei liegt in .\letsencrypt\ und hat 0 Bytes. Ich vermute, da ist irgendwo die Ursache zu suchen. CHMOD 600 habe ich auf die Datei gesetzt.
    Das ist beides nicht gut. Traefik nutzt zwar noch einen privilegierten Container, dennoch sollte man von außen die Rechte besser nicht verändern. Sobald der sein Zertifikat bekommen hat, müsste er es zusammen mit dem privaten Schlüssel in die acme.json schreiben. Der Pfad ist für GNU/Linux auch komisch, ist das etwa ein Windows System mit VM, WSL, Docker für Windows oder so was? Falls ja, zusätzliche Fehlerquellen. Vor allem wenn die Maschine hinter einem NAT steht, wonach der Aufruf von einer lokalen IP 192.168.32.1 aussieht, sofern das kein komplexeres Servernetz ist. Falls das ein Reverse Proxy ist, kann das unter Umständen ebenfalls eine Fehlerquelle sein.

    Die zwei Meldungen aus deinem Traefik-Log entstehen, weil er kein Zertifikat generieren konnte. Wenn Traefik dann auf kein bereits zuvor gespeichertes Zertifikat zurückgreifen kann, schaut er neuerdings noch nach einem Standardzertifikat für z.B: eine Top-Level Domain. Ist keines hinterlegt, liefert er sein selbst signiertes aus. Das akzeptieren Clients in der Regel nicht und brechen den Verbindungsversuch ab, sodass kein TLS-Handshake zustande kommt, wie er für eine HTTPS-Verbindung notwendig ist. Das sind also nicht der Fehler, sondern nur ein Folgefehler - die interessanten Dinge sind da schon längst passiert. Reproduzieren kann ich das auf einem Ubuntu 22 LTS-Server, der im Netz steht und auch entsprechend konfiguriert ist von außen erreichbar zu sein, nur in dem man schnell ist. Also Aufruf der Seite, bevor Traefik das Zertifikat geholt hat. Oder durch Überschreiten der Limits, das habe ich im Folgenden versucht und daher kommt der Handshake-Fehler 2x. Oder dauerhaft in dem man die LE Limits überschreitet wie in diesem Beispiel:
    Code:
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="Adding route for demo.u-labs.de with TLS options default" entryPointName=https
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="Trying to challenge certificate for domain [demo.u-labs.de] found in HostSNI rule" ACME CA="https://acme-v02.api.letsencrypt.org/directory" routerName=https-nginx@docker rule="Host(`demo.u-labs.de`)" providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="Looking for provided certificate(s) to validate [\"demo.u-labs.de\"]..." routerName=https-nginx@docker rule="Host(`demo.u-labs.de`)" providerName=le.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory"
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="Domains [\"demo.u-labs.de\"] need ACME certificates generation for domains \"demo.u-labs.de\"." ACME CA="https://acme-v02.api.letsencrypt.org/directory" routerName=https-nginx@docker rule="Host(`demo.u-labs.de`)" providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="Loading ACME certificates [demo.u-labs.de]..." providerName=le.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory" routerName=https-nginx@docker rule="Host(`demo.u-labs.de`)"
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="Serving default certificate for request: \"demo.u-labs.de\""
    001-traefik  | time="2023-01-11T19:38:41Z" level=debug msg="http: TLS handshake error from 1.2.3.4:33258: remote error: tls: bad certificate"
    001-traefik  | time="2023-01-11T19:38:47Z" level=debug msg="Building ACME client..." providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:47Z" level=debug msg="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:47Z" level=info msg=Register... providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:47Z" level=debug msg="legolog: [INFO] acme: Registering account for daniel@u-labs.de"
    001-traefik  | time="2023-01-11T19:38:48Z" level=debug msg="Using TLS Challenge provider." providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:48Z" level=debug msg="legolog: [INFO] [demo.u-labs.de] acme: Obtaining bundled SAN certificate"
    001-traefik  | time="2023-01-11T19:38:48Z" level=error msg="Unable to obtain ACME certificate for domains \"demo.u-labs.de\": unable to generate a certificate for the domains [demo.u-labs.de]: acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rateLimited :: Error creating new order :: too many certificates (5) already issued for this exact set of domains in the last 168 hours: demo.u-labs.de, retry after 2023-01-13T03:57:09Z: see https://letsencrypt.org/docs/duplicate-certificate-limit/" ACME CA="https://acme-v02.api.letsencrypt.org/directory" routerName=https-nginx@docker rule="Host(`demo.u-labs.de`)" providerName=le.acme
    001-traefik  | time="2023-01-11T19:38:58Z" level=debug msg="Serving default certificate for request: \"demo.u-labs.de\""
    001-traefik  | time="2023-01-11T19:38:58Z" level=debug msg="http: TLS handshake error from 1.2.3.4:55080: remote error: tls: bad certificate"
    Beschreibe mal bitte wie deine Infrastruktur aufgebaut ist: Was ist das für eine Maschine, wo steht die, was befindet sich alles davor. Und falls das ein lokales System in deinem Heimnetz ist, welche NAT-Regeln es gibt, sowie wohin die zeigen. Von den Infos die du geschrieben hast, sieht es vorläufig so aus, als ob das entweder

    1. ein Heimserver (oder eine VM auf einem Desktop-PC) ist, der netzwerktechnisch nicht korrekt nach außen erreichbar ist (NAT, Firewall etc), sodass die ACME-Challenge nicht funktioniert
    2. kein richtiger GNU/Linux Server ist sondern WSL, Docker für Windows oder etwas anderes halblebiges, was dort auf FS-Ebene komische Dinge tut
    3. du ein LE-Limit überschritten hast und daher eine Sperre greift, evtl. auch als Folgefehler von #1 durch mehrere Tests

    Bei #3 sollte in die acme.json allerdings zumindest ein privater Schlüssel geschrieben werden, d.H. die ist nicht 0 Byte groß. Daher vermute ich eher #1 oder #2, sofern sich aus den konkreteren Infos von dir nicht noch andere Fehlerquellen ergeben. Jedenfalls sieht es nach einem Problem außerhalb von Traefik aus. Der Artikel ist zwar für Traefik 2.6 geschrieben, mit den von dort kopierten Konfigurationsdateien funktioniert er auch mit der aktuellsten Version 2.9. Zumal diese hier auch produktiv auf mehreren Servern im Einsatz ist.


  4. The Following User Says Thank You to DMW007 For This Useful Post:

    DotNet (12.01.2023)

  5. #3

    Registriert seit
    19.11.2022
    Beiträge
    5
    Thanked 4 Times in 4 Posts

    Standard AW: Traefik proxy - TLS handshake error

    Hi!

    Zunächst vielen Dank für Deine ausführliche Antwort. Hier die Infos zur Infrastruktur und nochmal die vollständigen Logs. Ich habe lediglich die Version aus der traefik.yml rausgenommen.

    Zur Infrastruktur:
    Der Server steht bei einem Hoster und dort "frei" im Internet. Ich habe da extra nochmal nachgefragt - sämtlicher Traffic für die URL/IP wird direkt ungefiltert zu dem Server geschickt.
    Installiert ist Ubunut 22.04. (Bzgl. des Verzeichnisses letsancrypt hatte ich mich hier im Posting vertippt - sind natürlich Slashes und nicht Backslashes)

    Logs nach dem Starten des Traefik-Containers:

    Code:
    time="2023-01-12T15:08:07Z" level=info msg="Configuration loaded from flags."
    time="2023-01-12T15:08:07Z" level=info msg="Traefik version 2.9.1 built on 2022-10-03T14:22:13Z"
    time="2023-01-12T15:08:07Z" level=debug msg="Static configuration loaded {\"global\":{\"checkNewVersion\":true},\"serversTransport\":{\"maxIdleConnsPerHost\":200},\"entryPoints\":{\"http\":{\"address\":\":80\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{\"redirections\":{\"entryPoint\":{\"to\":\"https\",\"scheme\":\"https\",\"permanent\":true,\"priority\":2147483646}}},\"http2\":{\"maxConcurrentStreams\":250},\"udp\":{\"timeout\":\"3s\"}},\"https\":{\"address\":\":443\",\"transport\":{\"lifeCycle\":{\"graceTimeOut\":\"10s\"},\"respondingTimeouts\":{\"idleTimeout\":\"3m0s\"}},\"forwardedHeaders\":{},\"http\":{\"tls\":{\"certResolver\":\"le\"}},\"http2\":{\"maxConcurrentStreams\":250},\"udp\":{\"timeout\":\"3s\"}}},\"providers\":{\"providersThrottleDuration\":\"2s\",\"docker\":{\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"network\":\"proxy\",\"swarmModeRefreshSeconds\":\"15s\"}},\"log\":{\"level\":\"TRACE\",\"format\":\"common\"},\"certificatesResolvers\":{\"le\":{\"acme\":{\"email\":\"meine@email.de\",\"caServer\":\"https://acme-v02.api.letsencrypt.org/directory\",\"storage\":\"/letsencrypt/acme.json\",\"keyType\":\"RSA4096\",\"certificatesDuration\":2160,\"tlsChallenge\":{}}}}}"
    time="2023-01-12T15:08:07Z" level=info msg="\nStats collection is disabled.\nHelp us improve Traefik by turning this feature on :)\nMore details on: https://doc.traefik.io/traefik/contributing/data-collection/\n"
    time="2023-01-12T15:08:07Z" level=info msg="Starting provider aggregator aggregator.ProviderAggregator"
    time="2023-01-12T15:08:07Z" level=debug msg="Starting TCP Server" entryPointName=http
    time="2023-01-12T15:08:07Z" level=debug msg="Starting TCP Server" entryPointName=https
    time="2023-01-12T15:08:07Z" level=info msg="Starting provider *traefik.Provider"
    time="2023-01-12T15:08:07Z" level=debug msg="*traefik.Provider provider configuration: {}"
    time="2023-01-12T15:08:07Z" level=info msg="Starting provider *docker.Provider"
    time="2023-01-12T15:08:07Z" level=debug msg="*docker.Provider provider configuration: {\"watch\":true,\"endpoint\":\"unix:///var/run/docker.sock\",\"defaultRule\":\"Host(`{{ normalize .Name }}`)\",\"network\":\"proxy\",\"swarmModeRefreshSeconds\":\"15s\"}"
    time="2023-01-12T15:08:07Z" level=info msg="Starting provider *acme.ChallengeTLSALPN"
    time="2023-01-12T15:08:07Z" level=debug msg="*acme.ChallengeTLSALPN provider configuration: {}"
    time="2023-01-12T15:08:07Z" level=info msg="Starting provider *acme.Provider"
    time="2023-01-12T15:08:07Z" level=debug msg="*acme.Provider provider configuration: {\"email\":\"meine@email.de\",\"caServer\":\"https://acme-v02.api.letsencrypt.org/directory\",\"storage\":\"/letsencrypt/acme.json\",\"keyType\":\"RSA4096\",\"certificatesDuration\":2160,\"tlsChallenge\":{},\"ResolverName\":\"le\",\"store\":{},\"TLSChallengeProvider\":{},\"HTTPChallengeProvider\":{}}"
    time="2023-01-12T15:08:07Z" level=debug msg="Attempt to renew certificates \"720h0m0s\" before expiry and check every \"24h0m0s\"" providerName=le.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory"
    time="2023-01-12T15:08:07Z" level=info msg="Testing certificate renew..." providerName=le.acme ACME CA="https://acme-v02.api.letsencrypt.org/directory"
    time="2023-01-12T15:08:07Z" level=debug msg="Provider connection established with docker 20.10.12 (API 1.41)" providerName=docker
    time="2023-01-12T15:08:07Z" level=debug msg="Filtering disabled container" providerName=docker container=traefik-traefik-e76abfdac569ad4aae8a8ea539a33b2ed0b4d00396235095d316ab500bf50e50
    time="2023-01-12T15:08:07Z" level=debug msg="No default certificate, fallback to the internal generated certificate" tlsStoreName=default
    time="2023-01-12T15:08:07Z" level=debug msg="Added outgoing tracing middleware noop@internal" routerName=http-to-https@internal middlewareName=tracing middlewareType=TracingForwarder entryPointName=http
    time="2023-01-12T15:08:07Z" level=debug msg="Creating middleware" routerName=http-to-https@internal middlewareName=redirect-http-to-https@internal middlewareType=RedirectScheme entryPointName=http
    time="2023-01-12T15:08:07Z" level=debug msg="Setting up redirection to https 443" middlewareType=RedirectScheme entryPointName=http routerName=http-to-https@internal middlewareName=redirect-http-to-https@internal
    time="2023-01-12T15:08:07Z" level=debug msg="Adding tracing to middleware" entryPointName=http routerName=http-to-https@internal middlewareName=redirect-http-to-https@internal
    time="2023-01-12T15:08:07Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=traefik-internal-recovery middlewareType=Recovery
    time="2023-01-12T15:08:08Z" level=debug msg="No default certificate, fallback to the internal generated certificate" tlsStoreName=default
    time="2023-01-12T15:08:08Z" level=debug msg="Added outgoing tracing middleware noop@internal" entryPointName=http routerName=http-to-https@internal middlewareName=tracing middlewareType=TracingForwarder
    time="2023-01-12T15:08:08Z" level=debug msg="Creating middleware" entryPointName=http routerName=http-to-https@internal middlewareName=redirect-http-to-https@internal middlewareType=RedirectScheme
    time="2023-01-12T15:08:08Z" level=debug msg="Setting up redirection to https 443" entryPointName=http routerName=http-to-https@internal middlewareName=redirect-http-to-https@internal middlewareType=RedirectScheme
    time="2023-01-12T15:08:08Z" level=debug msg="Adding tracing to middleware" middlewareName=redirect-http-to-https@internal entryPointName=http routerName=http-to-https@internal
    time="2023-01-12T15:08:08Z" level=debug msg="Creating middleware" entryPointName=http middlewareName=traefik-internal-recovery middlewareType=Recovery


    Logs nach dem Starten des nginx-Containers:
    Code:
    time="2023-01-12T15:10:55Z" level=debug msg="Provider event received {Status:start ID:bf4f9a20ac0b435243857be55c91af2db8ba1861e63c25ca78ec3ab2048e9959 From:nginx:latest Type:container Action:start Actor:{ID:bf4f9a20ac0b435243857be55c91af2db8ba1861e63c25ca78ec3ab2048e9959 Attributes:map[com.docker.compose.config-hash:1dfd9576244fd8b1e8a17eda0f3f742a581a294b6d9a7ad90a95a05ec9286754 com.docker.compose.container-number:1 com.docker.compose.oneoff:False com.docker.compose.project:nginx-demo com.docker.compose.project.config_files:docker-compose.yml com.docker.compose.project.working_dir:/root/traefik/nginx-demo com.docker.compose.service:nginx com.docker.compose.version:1.29.2 image:nginx:latest
    maintainer:NGINX Docker Maintainers <docker-maint@nginx.com> name:002-nginx traefik.enable:true traefik.http.routers.nginx.rule:Host(`site1.myserver.de`)]} Scope:local Time:1673536255 TimeNano:1673536255486679988}" providerName=docker
    time="2023-01-12T15:10:55Z" level=debug msg="Filtering disabled container" container=traefik-traefik-e76abfdac569ad4aae8a8ea539a33b2ed0b4d00396235095d316ab500bf50e50 providerName=docker
    time="2023-01-12T15:10:55Z" level=debug msg="No entryPoint defined for this router, using the default one(s) instead: [http https]" routerName=nginx
    time="2023-01-12T15:10:56Z" level=debug msg="No default certificate, fallback to the internal generated certificate" tlsStoreName=default
    time="2023-01-12T15:10:56Z" level=debug msg="Creating middleware" entryPointName=http routerName=nginx@docker serviceName=nginx-nginx-demo middlewareType=Pipelining middlewareName=pipelining
    time="2023-01-12T15:10:56Z" level=debug msg="Creating load-balancer" serviceName=nginx-nginx-demo entryPointName=http routerName=nginx@docker
    time="2023-01-12T15:10:56Z" level=debug msg="Creating server 0 http://172.20.0.3:80" serviceName=nginx-nginx-demo entryPointName=http routerName=nginx@docker serverName=0
    time="2023-01-12T15:10:56Z" level=debug msg="child http://172.20.0.3:80 now UP"
    time="2023-01-12T15:10:56Z" level=debug msg="Propagating new UP status"
    time="2023-01-12T15:10:56Z" level=debug msg="Added outgoing tracing middleware nginx-nginx-demo" entryPointName=http middlewareName=tracing
    middlewareType=TracingForwarder routerName=nginx@docker
    time="2023-01-12T15:10:56Z" level=debug msg="Added outgoing tracing middleware noop@internal" entryPointName=http routerName=http-to-https@internal middlewareName=tracing middlewareType=TracingForwarder
    time="2023-01-12T15:10:56Z" level=debug msg="Creating middleware" routerName=http-to-https@internal middlewareType=RedirectScheme middlewareName=redirect-http-to-https@internal entryPointName=http
    time="2023-01-12T15:10:56Z" level=debug msg="Setting up redirection to https 443" entryPointName=http routerName=http-to-https@internal middlewareType=RedirectScheme middlewareName=redirect-http-to-https@internal
    time="2023-01-12T15:10:56Z" level=debug msg="Adding tracing to middleware" entryPointName=http routerName=http-to-https@internal middlewareName=redirect-http-to-https@internal
    time="2023-01-12T15:10:56Z" level=debug msg="Creating middleware" middlewareType=Recovery entryPointName=http middlewareName=traefik-internal-recovery
    time="2023-01-12T15:10:56Z" level=debug msg="Creating middleware" serviceName=nginx-nginx-demo middlewareName=pipelining middlewareType=Pipelining entryPointName=https routerName=https-nginx@docker
    time="2023-01-12T15:10:56Z" level=debug msg="Creating load-balancer" entryPointName=https routerName=https-nginx@docker serviceName=nginx-nginx-demo
    time="2023-01-12T15:10:56Z" level=debug msg="Creating server 0 http://172.20.0.3:80" serviceName=nginx-nginx-demo serverName=0 entryPointName=https routerName=https-nginx@docker
    time="2023-01-12T15:10:56Z" level=debug msg="child http://172.20.0.3:80 now UP"
    time="2023-01-12T15:10:56Z" level=debug msg="Propagating new UP status"
    time="2023-01-12T15:10:56Z" level=debug msg="Added outgoing tracing middleware nginx-nginx-demo" entryPointName=https routerName=https-nginx@docker middlewareName=tracing middlewareType=TracingForwarder
    time="2023-01-12T15:10:56Z" level=debug msg="Creating middleware" middlewareType=Recovery entryPointName=https middlewareName=traefik-internal-recovery
    time="2023-01-12T15:10:56Z" level=debug msg="Adding route for site1.myserver.de with TLS options default" entryPointName=https
    time="2023-01-12T15:10:56Z" level=debug msg="Trying to challenge certificate for domain [site1.myserver.de] found in HostSNI rule" routerName=https-nginx@docker rule="Host(`site1.myserver.de`)" ACME CA="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme
    time="2023-01-12T15:10:56Z" level=debug msg="Looking for provided certificate(s) to validate [\"site1.myserver.de\"]..." routerName=https-nginx@docker rule="Host(`site1.myserver.de`)" ACME CA="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme
    time="2023-01-12T15:10:56Z" level=debug msg="Domains [\"site1.myserver.de\"] need ACME certificates generation for domains \"site1.myserver.de\"." ACME CA="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme routerName=https-nginx@docker rule="Host(`site1.myserver.de`)"
    time="2023-01-12T15:10:56Z" level=debug msg="Loading ACME certificates [site1.myserver.de]..." ACME CA="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme routerName=https-nginx@docker rule="Host(`site1.myserver.de`)"
    time="2023-01-12T15:11:00Z" level=debug msg="Building ACME client..." providerName=le.acme
    time="2023-01-12T15:11:00Z" level=debug msg="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme
    time="2023-01-12T15:11:00Z" level=error msg="Unable to obtain ACME certificate for domains \"site1.myserver.de\": cannot get ACME client get directory at 'https://acme-v02.api.letsencrypt.org/directory': Get \"https://acme-v02.api.letsencrypt.org/directory\": dial tcp: lookup acme-v02.api.letsencrypt.org on 127.0.0.11:53: read udp 127.0.0.1:35265->127.0.0.11:53: read: connection refused" ACME CA="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme routerName=https-nginx@docker rule="Host(`site1.myserver.de`)"
    Logs nach dem Zugriff auf die URL:
    Code:
    time="2023-01-12T15:11:25Z" level=debug msg="Serving default certificate for request: \"site1.myserver.de\""
    time="2023-01-12T15:11:25Z" level=debug msg="http: TLS handshake error from 172.20.0.1:34964: remote error: tls: bad certificate"

  6. The Following User Says Thank You to olafk.de For This Useful Post:

    DotNet (12.01.2023)

  7. #4
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    5.261
    Thanked 8.997 Times in 2.897 Posts
    Blog Entries
    5

    Standard AW: Traefik proxy - TLS handshake error

    In dem Log sieht man, dass er kein Zertifikat für die Domain hat und daher eines anfordern möchte. Das läuft schief, weil er keine Verbindung zu den LetsEncrypt-Servern aufbauen kann:
    Code:
    time="2023-01-12T15:11:00Z" level=error msg="Unable to obtain ACME certificate for domains \"site1.myserver.de\": cannot get ACME client get directory at 'https://acme-v02.api.letsencrypt.org/directory': Get \"https://acme-v02.api.letsencrypt.org/directory\": dial tcp: lookup acme-v02.api.letsencrypt.org on 127.0.0.11:53: read udp 127.0.0.1:35265->127.0.0.11:53: read: connection refused" ACME CA="https://acme-v02.api.letsencrypt.org/directory" providerName=le.acme routerName=https-nginx@docker rule="Host(`site1.myserver.de`)"
    Er scheitert also schon vor These #1, weil der Server gar nicht nach außen kommt. Wenn der Hoster keine Hardware-Firewall davor stehen hat, stimmt vermutlich etwas mit den Docker-Netzwerken nicht. Theoretisch könnte es auch eine vom Betriebssystem sein. Bei Ubuntu ist das soweit ich weiß nicht der Fall, außer du hast selbst eine installiert bzw. der Hoster stellt ein angepasstes OS-Image zur Verfügung, wo er eine vorinstalliert. Ab Werk machen das eher Distributionen wie CentOS.

    Ich würde mit dem Eingrenzen anfangen, was wo nicht geht. Rufe erst mal auf dem Server direkt die LE-URL aus dem Log mit z.B. curl oder wget auf. Da solltest du im Erfolgsfall ein JSON-Dokument mit den Adressen zu ihren API-Schnittstellen zurück bekommen:
    Code:
    $ curl 'https://acme-v02.api.letsencrypt.org/directory'
    {
      "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change",
      "meta": {
        "caaIdentities": [
          "letsencrypt.org"
        ],
        "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf",
        "website": "https://letsencrypt.org"
      },
      "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct",
      "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce",
      "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order",
      "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert",
      "s86QE-xcnhQ": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417"
    }
    Wenn das nicht geht, probierst du ein paar andere Adressen wie u-labs.de, google.de, jeweils mit Protokoll. Das gleiche machst du anschließend in dem Traefik-Container, mit exec bekommst du eine Shell. In den Containern sind solche Werkzeuge i.d.R. nicht standardmäßig enthalten, um sie schlank zu halten. Außer die Anwendung benötigt sie, was oft nicht der Fall ist, wie hier bei Traefik. Daher musst du curl zunächst nachinstallieren. Da das Image auf Alpine Linux setzt, wird apk als Paketmanager genutzt, statt apt aus der Debian/Ubuntu Ecke:
    Code:
    docker exec -it <containerName> sh
    / # apk add curl
    / # curl 'https://acme-v02.api.letsencrypt.org/directory'
    {
      "SaJBkug5abM": "https://community.letsencrypt.org/t/adding-random-entries-to-the-directory/33417",
      "keyChange": "https://acme-v02.api.letsencrypt.org/acme/key-change",
      "meta": {
        "caaIdentities": [
          "letsencrypt.org"
        ],
        "termsOfService": "https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf",
        "website": "https://letsencrypt.org"
      },
      "newAccount": "https://acme-v02.api.letsencrypt.org/acme/new-acct",
      "newNonce": "https://acme-v02.api.letsencrypt.org/acme/new-nonce",
      "newOrder": "https://acme-v02.api.letsencrypt.org/acme/new-order",
      "revokeCert": "https://acme-v02.api.letsencrypt.org/acme/revoke-cert"
    }
    Dort wo das nicht funktioniert (wahrscheinlich mindestens im Traefik-Container) hast du ein Netzwerkproblem. Wenn es mit anderen Adressen auch nicht funktioniert ein grundsätzliches, sodass die Container nicht ins Internet kommen. Das kann auf verschiedene Arten verursacht werden. Zum Beispiel die Installation alter Docker-Pakete oder die Parallele Installation per APT & Snap. Im Zweifel kann es auch helfen, Docker seine iptables Regeln neu erstellen zu lassen. Handelt es sich um einen Testserver auf dem ohnehin nichts groß läuft, ist es ggf. einfacher, den noch mal sauber neu aufzusetzen und auf den Installationsweg von Docker zu achten.


  8. The Following User Says Thank You to DMW007 For This Useful Post:

    DotNet (12.01.2023)

  9. #5

    Registriert seit
    19.11.2022
    Beiträge
    5
    Thanked 4 Times in 4 Posts

    Standard AW: Traefik proxy - TLS handshake error

    Danke! Es scheint ein Netzwerk-Problem zu sein, denn aus dem Traefik-Container heraus kann ich die URL tatsächlich nicht aufrufen. Auch apk oder ein ping funktionieren nicht.
    Ich forsche an der Stelle einmal weiter.

  10. The Following User Says Thank You to olafk.de For This Useful Post:

    DMW007 (12.01.2023)

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 09.01.2023, 21:15
  2. Ubuntu Traefik 404 not found
    Von BuddiHagge im Forum Linux
    Antworten: 6
    Letzter Beitrag: 20.10.2022, 22:48
  3. Antworten: 1
    Letzter Beitrag: 21.04.2013, 15:59
  4. [OUTPUT] t - Handshake
    Von 3lit im Forum Knuddels Programmierung
    Antworten: 7
    Letzter Beitrag: 29.10.2011, 13:22

Stichworte

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.