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 :
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é.
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(); }
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!