Message d’erreur
javax.net.ssl.SSLHandshakeException: (protocol_version) Received fatal alert: protocol_version
Également affiché sous la forme
- javax.net.ssl.SSLHandshakeException: Received fatal alert: protocol_version
À partir du JDK 21, le nom de l’alerte figure entre parenthèses. Si le serveur choisit au contraire une version que la JVM refuse, Java affiche « The server selected protocol version TLS10 is not accepted by client preferences [TLS13, TLS12] ».
Java (JSSE) — TLS alert 70 received from the server
Ce que cela signifie
Le serveur a refusé les versions de TLS proposées par la JVM et a répondu par l’alerte 70 (protocol_version). Les JDK actuels ne proposent que TLS 1.3 et 1.2 (1.0 et 1.1 figurent dans jdk.tls.disabledAlgorithms) : un serveur limité aux anciennes versions n’a donc aucune version en commun avec eux.
Pourquoi cela se produit
Le serveur ne prend en charge que TLS 1.0 ou 1.1
fréquenteÉquipements hérités, anciens serveurs IIS ou Java et systèmes embarqués qui n’ont jamais reçu TLS 1.2.
Le client est figé sur des versions que le serveur a désactivées
occasionnelleD’anciens scripts de démarrage fixent https.protocols ou jdk.tls.client.protocols à TLSv1 pour un système hérité disparu depuis longtemps ; les serveurs modernes refusent cette version.
Comment corriger l’erreur
- 1.
Trouver les versions acceptées par le serveur
Testez chaque version avec openssl s_client, puis corrigez le côté qui est obsolète.
bash for v in tls1 tls1_1 tls1_2 tls1_3; do printf '%-7s ' "$v" echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -"$v" \ -cipher 'DEFAULT:@SECLEVEL=0' >/dev/null 2>&1 && echo accepted || echo refused done - 2.
Supprimer les versions de protocole figées côté client
Recherchez https.protocols ou jdk.tls.client.protocols dans les scripts de démarrage et les options de la JVM ; autorisez TLSv1.3 et TLSv1.2.
bash # Do not pin old versions on the client; let JSSE offer 1.3 and 1.2 grep -rn 'https.protocols\|jdk.tls.client.protocols' /etc/default/app* "$JAVA_HOME/conf" 2>/dev/null java -Djdk.tls.client.protocols=TLSv1.3,TLSv1.2 -jar app.jar - 3.
Activer TLS 1.2 et 1.3 sur le serveur
La correction durable : tous les clients maintenus les prennent en charge.
text # Server side: enable TLS 1.2 and 1.3 ssl_protocols TLSv1.2 TLSv1.3;