Zum Inhalt springen
ecdsa.com
curl (OpenSSL backend)curl

Fehlermeldung

curl: (35) TLS connect error: error:0A000102:SSL routines::unsupported protocol

Auch ausgegeben als

  • curl: (35) error:0A000102:SSL routines::unsupported protocol
  • curl: (35) error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol

Neuere curl-Releases (hier 8.14.1) stellen dem OpenSSL-Grund „TLS connect error: “ voran. OpenSSL 1.1.1 nennt die Funktion: „error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol“. Lehnt dagegen der Server ab, sieht der Client stattdessen „tlsv1 alert protocol version“.

curl (OpenSSL backend) — CURLE_SSL_CONNECT_ERROR, SSL_R_UNSUPPORTED_PROTOCOL

Was der Fehler bedeutet

Der Server hat auf das ClientHello mit einer Protokollversion geantwortet, die die TLS-Bibliothek von curl nicht verwenden darf, typischerweise TLS 1.0 oder 1.1. Der Client bricht daraufhin auf seiner Seite ab. Netzwerkpfad und Zertifikat spielen hier keine Rolle: Die beiden Enden haben schlicht keine gemeinsame TLS-Version.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Prüfen, welche Versionen der Server akzeptiert

    Probiere jede Version explizit aus. Funktionieren nur tls1 oder tls1_1, muss der Server aktualisiert werden; funktioniert auch tls1_2, suche nach einer Client-Option, die die Höchstversion begrenzt.

    bash
    # Which versions does the server accept? (each line succeeds or fails on its own)
    for v in tls1 tls1_1 tls1_2 tls1_3; do
      printf '%s: ' "$v"
      openssl s_client -connect legacy.example.com:443 -"$v" </dev/null >/dev/null 2>&1 && echo ok || echo no
    done
  2. 2.

    TLS 1.2 und 1.3 auf dem Server aktivieren

    Schalte TLS 1.2 ein (und 1.3, wo der Stack es unterstützt) und schalte 1.0/1.1 ab. Nur diese Lösung hilft auch Browsern, mobilen Apps und anderen API-Clients.

    text
    # nginx
    ssl_protocols TLSv1.2 TLSv1.3;
    # Apache httpd
    SSLProtocol -all +TLSv1.2 +TLSv1.3
    # IIS / Windows Server: enable TLS 1.2 under
    # HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server
  3. 3.

    Letzter Ausweg: TLS 1.0 für einen einzelnen Aufruf an ein Gerät erlauben, das sich nicht aktualisieren lässt

    Aktiviere die alte Version nur für den konkreten Befehl wieder, der mit dem Altgerät kommuniziert, niemals systemweit. TLS 1.0 beruht auf SHA-1- und CBC-Konstruktionen mit bekannten Angriffen; halte solchen Traffic in einem isolierten Verwaltungsnetz.

    bash
    # Last resort for a device you cannot upgrade: allow TLS 1.0 for this one call only.
    # OpenSSL 3 also needs security level 0 for the SHA-1 based handshake of TLS 1.0/1.1.
    curl --tlsv1.0 --ciphers 'DEFAULT:@SECLEVEL=0' https://legacy-device.example.internal/

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen