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
Der Server unterstützt nur TLS 1.0 oder 1.1
häufigAlte Installationen von Windows Server/IIS, Anwendungen aus der Zeit von Java 6/7 und nicht mehr gewartete Load Balancer handeln weiterhin TLS 1.0 aus. RFC 8996 hat TLS 1.0 und 1.1 im Jahr 2021 für veraltet erklärt, und aktuelle Clients bieten sie nicht mehr an.
Die Systemrichtlinie des Clients schreibt mindestens TLS 1.2 vor
häufigDebian, Ubuntu (seit 20.04), die Krypto-Richtlinien von RHEL 8+ und das Standard-Sicherheitsniveau von OpenSSL 3 lehnen alle TLS 1.0/1.1 ab. Von einem älteren Rechner aus funktioniert derselbe Server womöglich noch, weshalb der Fehler umgebungsabhängig wirkt.
Eingebettete Verwaltungsoberflächen und Geräte
gelegentlichWeboberflächen von Druckern und USVs, alte IPMI/iLO-Firmware, SCADA-Gateways und ähnliche Geräte lassen sich oft nicht über TLS 1.0 hinaus aktualisieren.
So behebst du den Fehler
- 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.
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.
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
SSL routines:ssl_choose_client_version:unsupported protocolOpenSSL (client side)curl: (35) TLS connect error: error:0A00042E:SSL routines::tlsv1 alert protocol…curl (OpenSSL backend)The server selected protocol version TLS10 is not accepted by client preference…Java (JSSE)tls: server selected unsupported protocol version 301Go crypto/tls clientnet::ERR_SSL_VERSION_OR_CIPHER_MISMATCHChrome, Edge and other Chromium browsers