Fehlermeldung
SSL routines:ssl_choose_client_version:unsupported protocol
Auch ausgegeben als
- error:0A000102:SSL routines::unsupported protocol
Die OpenSSL-CLI gibt „<thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source>“ aus; curl, Node.js und andere Anwendungen zeigen „error:0A000102:SSL routines::unsupported protocol“. OpenSSL 1.1.1 verwendete den Code 1425F102.
OpenSSL (client side) — SSL_R_UNSUPPORTED_PROTOCOL: the server chose a version the client does not allow
Was der Fehler bedeutet
Der Client hat TLS 1.2 und 1.3 angeboten, aber das ServerHello des Servers hat eine ältere Version gewählt (typischerweise TLS 1.0), die das OpenSSL des Clients nicht verwenden darf. Der Client bricht in ssl_choose_client_version ab. Alte TLS-Stacks ignorieren den vom Client angebotenen Bereich und antworten einfach mit ihrer eigenen Version; moderne Stacks würden stattdessen mit dem Alert protocol_version ablehnen.
Warum der Fehler auftritt
Der Server spricht nur TLS 1.0 oder 1.1
häufigNicht mehr gewartete Server, alte Appliances und eingebettete Geräte.
Das OpenSSL des Clients verbietet alte Versionen
häufigAktuelle Distributionen setzen TLS 1.2 als Minimum (Sicherheitsniveau 2), deshalb scheitert ein Server, der von einem alten Rechner aus funktioniert hat, von einem neuen aus.
So behebst du den Fehler
- 1.
Version des Servers bestätigen
Erzwingst du für diesen einen Diagnosebefehl TLS 1.0 mit Sicherheitsniveau 0, siehst du, ob der Server nur die alte Version spricht.
bash # Allowed only for this diagnostic command: which version does the server pick? echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com \ -tls1 -cipher 'DEFAULT:@SECLEVEL=0' -brief 2>&1 | grep -E 'Protocol version|error' - 2.
TLS 1.2 und 1.3 auf dem Server aktivieren
Ein Upgrade des Servers (oder ein moderner TLS-Terminator davor) ist die einzige dauerhafte Lösung.
text # Server side ssl_protocols TLSv1.2 TLSv1.3; # nginx SSLProtocol -all +TLSv1.2 +TLSv1.3 # Apache httpd