Fehlermeldung
curl: (35) TLS connect error: error:0A00042E:SSL routines::tlsv1 alert protocol version
Auch ausgegeben als
- curl: (35) error:0A00042E:SSL routines::tlsv1 alert protocol version
- curl: (35) error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Neuere curl-Releases stellen dem OpenSSL-Grund „TLS connect error: “ voran. OpenSSL 1.1.1 nennt zusätzlich die Funktion: „error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version“. Wählt der Server dagegen eine Version, die der Client ablehnt, meldet der Client „unsupported protocol“.
curl (OpenSSL backend) — CURLE_SSL_CONNECT_ERROR, TLS alert 70 (protocol_version) received from the server
Was der Fehler bedeutet
Der Server hat den TLS-Alert 70 (protocol_version) gesendet: Keine der TLS-Versionen, die curl angeboten hat, ist für ihn akzeptabel. Das Präfix „tlsv1“ ist nur der Name, den OpenSSL den seit TLS 1.0 definierten Alerts gibt, nicht die verwendete Version. Meist hängt der Server auf TLS 1.0/1.1 fest, während der Client 1.2 und 1.3 anbietet, oder die Höchstversion eines Clients wurde unter das Minimum des Servers begrenzt.
Warum der Fehler auftritt
Der Server unterstützt nur TLS 1.0 oder 1.1
häufigDas ClientHello eines modernen Clients bietet nur TLS 1.2 und 1.3 an. Ein Server, dessen höchste Version 1.0 oder 1.1 ist und der die Erweiterung supported_versions versteht, hat nichts zur Auswahl und lehnt mit protocol_version ab.
Dem Client wurde eine alte Höchstversion vorgegeben
gelegentlich--tls-max 1.1, --tlsv1.0 zusammen mit einer Obergrenze oder eine Zeile in .curlrc, die vom Debuggen eines alten Geräts übrig geblieben ist, bringen curl dazu, Versionen anzubieten, die ein aktueller Server deaktiviert hat.
Ein Server, der nur TLS 1.3 akzeptiert, trifft auf einen auf 1.2 begrenzten Client
gelegentlichManche gehärteten Endpunkte akzeptieren nur TLS 1.3. Clients, die gegen alte Bibliotheken gebaut oder per Konfiguration auf TLS 1.2 festgelegt wurden, werden mit demselben Alert abgewiesen.
So behebst du den Fehler
- 1.
Vom Server akzeptierte Versionen ermitteln
Probiere jede Version mit openssl s_client aus. Das Ergebnis zeigt dir, ob du den Server korrigieren musst (nur tls1/tls1_1 akzeptiert) oder den Client (er hat die akzeptierte Version nie angeboten).
bash for v in tls1 tls1_1 tls1_2 tls1_3; do printf '%s: ' "$v" openssl s_client -connect api.example.com:443 -servername api.example.com -"$v" </dev/null >/dev/null 2>&1 \ && echo accepted || echo refused done - 2.
TLS 1.2 und 1.3 auf dem Server aktivieren
Aktualisiere die TLS-Konfiguration (und falls nötig die TLS-Bibliothek oder das Betriebssystem), damit der Server TLS 1.2 und 1.3 akzeptiert.
text # nginx ssl_protocols TLSv1.2 TLSv1.3; # HAProxy (global section) ssl-default-bind-options ssl-min-ver TLSv1.2 - 3.
Versionsgrenzen auf dem Client entfernen
Entferne --tls-max und alte Protokoll-Flags aus Skripten und .curlrc; lege nur ein Minimum fest, damit curl die höchste Version aushandeln kann, die beide Seiten unterstützen.
bash grep -nE 'tls-max|tlsv1|sslv3' ~/.curlrc # a forgotten cap in the config file curl --tlsv1.2 https://api.example.com/ # minimum 1.2, no maximum
Verwandte Fehler
SSL routines:ssl3_read_bytes:tlsv1 alert protocol versionOpenSSL (client side)curl: (35) TLS connect error: error:0A000102:SSL routines::unsupported protocolcurl (OpenSSL backend)curl: (35) TLS connect error: error:0A000410:SSL routines::ssl/tls alert handsh…curl (OpenSSL backend)SSL_ERROR_UNSUPPORTED_VERSIONFirefox