Message d’erreur
SSL routines:tls_setup_handshake:no protocols available
Également affiché sous la forme
- error:0A0000BF:SSL routines::no protocols available
La CLI openssl (3.0 et 3.5) affiche « error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available » ; les applications qui formatent les erreurs sans le nom de la fonction affichent « error:0A0000BF:SSL routines::no protocols available ».
OpenSSL (client or server side) — SSL_R_NO_PROTOCOLS_AVAILABLE before the handshake starts
Ce que cela signifie
OpenSSL a refusé ne serait-ce que de commencer le handshake car, une fois toutes les restrictions appliquées, il ne reste aucune version du protocole à proposer. En général, l’application a demandé TLS 1.0 ou 1.1 alors que le niveau de sécurité d’OpenSSL (2 par défaut sur les distributions actuelles) les interdit, ou bien la version minimale configurée est supérieure à la version maximale. Rien n’a été envoyé au serveur.
Pourquoi cela se produit
TLS 1.0/1.1 imposés alors que le niveau de sécurité les interdit
fréquenteDepuis OpenSSL 3.0, les niveaux de sécurité 1 et supérieurs désactivent TLS 1.0 et 1.1 ; les distributions utilisent le niveau 2 par défaut. Un client codé en dur sur TLS 1.0 pour un équipement ancien n’a donc rien à proposer.
Version minimale supérieure à la version maximale
occasionnelleLes configurations qui combinent un minimum de TLS 1.3 et un maximum de TLS 1.2 (souvent issus de deux paramètres différents superposés) laissent une plage vide.
Une politique cryptographique du système prend le pas sur l’application
occasionnelleLes politiques cryptographiques de RHEL et de Fedora (DEFAULT, FUTURE) et le fichier openssl.cnf de Debian fixent MinProtocol et le niveau de sécurité pour toutes les applications OpenSSL de la machine.
Comment corriger l’erreur
- 1.
Trouver le paramètre restrictif
Recherchez dans openssl.cnf et dans la politique cryptographique du système les valeurs de MinProtocol, de MaxProtocol et de @SECLEVEL dans CipherString.
bash openssl version -d # where openssl.cnf lives grep -nE 'MinProtocol|MaxProtocol|CipherString' /usr/lib/ssl/openssl.cnf /etc/ssl/openssl.cnf 2>/dev/null update-crypto-policies --show 2>/dev/null # RHEL/Fedora system policy - 2.
Équipement ancien : abaisser le niveau pour une seule commande
Ajouter @SECLEVEL=0 à la chaîne de chiffrements réactive TLS 1.0/1.1 pour cette seule invocation. Ne placez pas de telles exceptions dans la configuration globale du système et ne les utilisez pas sur des réseaux non fiables.
bash # For a one-off test against a legacy device: lower the security level for this command only echo | openssl s_client -connect legacy.example.com:443 -tls1 -cipher 'DEFAULT:@SECLEVEL=0' - 3.
Utiliser une plage de versions cohérente
Assurez-vous que le minimum ne dépasse pas le maximum ; la plage habituelle aujourd’hui va de TLS 1.2 à TLS 1.3.
ini # openssl.cnf (system_default_sect): a consistent range MinProtocol = TLSv1.2 MaxProtocol = TLSv1.3