Message d’erreur
SSL routines:ssl_choose_client_version:unsupported protocol
Également affiché sous la forme
- error:0A000102:SSL routines::unsupported protocol
La CLI openssl affiche « <thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source> » ; curl, Node.js et d’autres applications affichent « error:0A000102:SSL routines::unsupported protocol ». OpenSSL 1.1.1 utilisait le code 1425F102.
OpenSSL (client side) — SSL_R_UNSUPPORTED_PROTOCOL: the server chose a version the client does not allow
Ce que cela signifie
Le client a proposé TLS 1.2 et 1.3, mais le ServerHello du serveur a choisi une version plus ancienne (généralement TLS 1.0), que l’OpenSSL du client n’a pas le droit d’utiliser. Le client abandonne dans ssl_choose_client_version. Les anciennes piles TLS ignorent la plage proposée par le client et répondent simplement avec leur propre version ; les piles modernes refuseraient plutôt avec une alerte protocol_version.
Pourquoi cela se produit
Le serveur ne parle que TLS 1.0 ou 1.1
fréquenteServeurs non maintenus, anciens équipements et systèmes embarqués.
L’OpenSSL du client interdit les anciennes versions
fréquenteLes distributions actuelles fixent TLS 1.2 comme minimum (niveau de sécurité 2) : un serveur qui fonctionnait depuis une ancienne machine échoue donc depuis une nouvelle.
Comment corriger l’erreur
- 1.
Confirmer la version du serveur
Forcer TLS 1.0 au niveau de sécurité 0, pour cette seule commande de diagnostic, montre si le serveur ne parle que l’ancienne version.
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.
Activer TLS 1.2 et 1.3 sur le serveur
Mettre à niveau le serveur (ou placer devant lui un terminateur TLS moderne) est la seule correction durable.
text # Server side ssl_protocols TLSv1.2 TLSv1.3; # nginx SSLProtocol -all +TLSv1.2 +TLSv1.3 # Apache httpd