Maison >Java >javaDidacticiel >Pourquoi est-ce que je reçois une alerte de prise de contact SSL « nom_unrecognized » après la mise à niveau vers Java 1.7 ?

Pourquoi est-ce que je reçois une alerte de prise de contact SSL « nom_unrecognized » après la mise à niveau vers Java 1.7 ?

DDD
DDDoriginal
2024-12-07 07:12:10760parcourir

Why Am I Getting an

Alerte de prise de contact SSL : problème de nom non reconnu après la mise à niveau vers Java 1.7.0

Lors de la mise à niveau de Java 1.6 vers 1.7, les utilisateurs peuvent rencontrer un Alerte SSLHandshake avec le message d'erreur "unrecognized_name" lors de l'établissement d'une connexion SSL à un serveur Web. Cette erreur est principalement due à l'introduction par Java 7 de la prise en charge de l'indication de nom de serveur (SNI), qui est activée par défaut.

Pour résoudre ce problème, plusieurs options sont disponibles :

  • Désactiver SNI :

Pour désactiver SNI globalement, l'argument de ligne de commande suivant peut être utilisé lors de l'exécution de application :

-Djsse.enableSNIExtension=false

Alternativement, la propriété peut être définie par programme avant que des actions SSL ne soient effectuées :

System.setProperty("jsse.enableSNIExtension", "false");

Cependant, la désactivation de SNI peut avoir des implications pour les applications qui nécessitent sa fonctionnalité.

  • Gérer un nom non reconnu Alertes :

Une autre approche consiste à gérer l'alerte « nom_unrecognisé » de manière plus gracieuse. Les étapes suivantes peuvent être suivies :

// Create an SSLSocket with the desired hostname
SSLSocket sslsock = ...

// Attempt handshake
try {
    // This will block until the attempt succeeds or fails.
    sslsock.startHandshake();
} catch (SSLException e) {
    // Handle the exception here. If it contains the "unrecognized_name" message, disable SNI and retry.
}

// Disable SNI and retry handshake without hostname
if (e.getMessage().contains("unrecognized_name")) {
    sslsock = ... // Create an SSLSocket without specifying a hostname
    sslsock.startHandshake();
}
  • Autoriser les certificats non fiables :

Le code fourni tente de se connecter à un serveur avec un certificat. Pour atténuer ce problème, envisagez de mettre en œuvre une gestion de confiance personnalisée ou d'utiliser le gestionnaire de confiance intégré :

// Custom trust management (for untrusted certificates)
TrustManager[] trustAllCerts = ...

// Built-in trust manager
TrustManager[] trustManagers = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()).getTrustManagers();

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