Maison >Java >javaDidacticiel >Pourquoi Java 1.7.0 génère-t-il une alerte de prise de contact SSL « nom_non reconnu » et comment peut-elle être résolue ?

Pourquoi Java 1.7.0 génère-t-il une alerte de prise de contact SSL « nom_non reconnu » et comment peut-elle être résolue ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-11 17:00:19403parcourir

Why Does Java 1.7.0 Produce an

Alerte de prise de contact SSL : une erreur de nom non reconnu réapparaît avec la mise à niveau de Java 1.7.0

Après la mise à niveau de Java 1.6 vers 1.7, les utilisateurs peuvent rencontrer un Alerte de prise de contact SSL caractérisée par le message d'erreur « nom_unrecognisé ». Ce problème survient spécifiquement lors de l'établissement de connexions SSL à un serveur Web.

L'erreur provient de l'introduction de la prise en charge SNI (Server Name Indication) dans Java 7, qui est activée par défaut. Certains serveurs mal configurés répondent avec un avertissement « Nom non reconnu » lors de la prise de contact, qui est ignoré par la plupart des clients, mais pas par Java.

Options de solution de contournement :

Les ingénieurs d'Oracle ont refusé pour résoudre ce problème. Cependant, deux solutions principales sont disponibles :

Désactiver SNI :

  • Exécutez l'application avec la commande : java -Djsse.enableSNIExtension=false yourClass
  • Définissez la propriété par programme : System.setProperty("jsse.enableSNIExtension", "false");

Notez que la désactivation de SNI affecte l'ensemble de l'application.

Gérer les serveurs mal configurés :

Pour une approche plus ciblée , suivez les étapes suivantes :

  1. Créez un SSLSocket avec l'hôte nom.
  2. Tentative de démarrage de la poignée de main.
  3. Recherchez une erreur "nom_unrecognized".
  4. Si une erreur se produit, réessayez d'ouvrir un SSLSocket sans nom d'hôte (en désactivant efficacement SNI).

Code Exemple :

SSLSocketFactory factory = (SSLSocketFactory) SSLContext.getDefault().getSocketFactory();
SSLSocket sslsock = (SSLSocket) factory.createSocket(host, 443);
try {
  sslsock.startHandshake();
} catch (SSLException e) {
  if (e.getMessage().equals("handshake alert:  unrecognized_name")) {
    sslsock = (SSLSocket) factory.createSocket(host, 443);
    sslsock.startHandshake();
  } else {
    // Handle other errors
  }
}

Conclusion :

En implémentant les solutions de contournement décrites, les utilisateurs peuvent atténuer l'erreur « nom_unrecognisé » lors de l'utilisation de Java 1.7.0 et de l'interaction avec des serveurs mal configurés tout en conservant les capacités SNI pour les autres connexions.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn