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
Libérer: 2024-12-07 07:12:10
original
814 Les gens l'ont consulté

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
Copier après la connexion

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

System.setProperty("jsse.enableSNIExtension", "false");
Copier après la connexion

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();
}
Copier après la connexion
  • 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();
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal