Maison > Java > javaDidacticiel > le corps du texte

Comment corriger l'erreur « java.security.cert.CertificateException : aucun nom alternatif de sujet présent » en Java ?

DDD
Libérer: 2024-11-08 02:18:02
original
961 Les gens l'ont consulté

How to Fix the

Dépannage de l'erreur "java.security.cert.CertificateException : aucun nom alternatif de sujet présent" en Java

Lors de la connexion à un service Web HTTPS à l'aide d'un client Java, rencontrer l'exception « java.security.cert.CertificateException : aucun nom alternatif de sujet présent » peut être frustrant. Voici comment résoudre ce problème :

Vérification des informations du certificat

Pour obtenir les détails du certificat du serveur, utilisez la commande "openssl s_client -showcerts -connect AAA.BBB.CCC .DDD:9443 >certs.txt." Le fichier résultant "certs.txt" contient :

  • Chaîne de certificats : Identifiez le certificat contenant "CN=AAA.BBB.CCC.DDD."
  • Certificat de serveur : Extrayez la section entre "-----BEGIN CERTIFICATE-----" et "-----END CERTIFICATE-----" pour ce certificat.

Solution alternative

Concernant l'étape 1 de la solution proposée :

  • L'extraction du certificat seul est incorrecte ; cela nécessite des modifications supplémentaires.
  • Le but est de créer un certificat qui correspond à l'adresse IP (AAA.BBB.CCC.DDD).

Concernant l'étape 2 du Solution proposée :

  • Modifier le certificat pour inclure AAA.BBB.CCC.DDD nécessite des outils et une expertise spécifiques, ce qui rend cette étape peu pratique.

Approche recommandée

Considérez les alternatives suivantes :

  • Désactivez les vérifications HTTPS :
// In the ISomeService class:
static {
    disableSslVerification();
}

private static void disableSslVerification() {
    // ... [Code to disable HTTPS checks as described in the provided answer]
}
Copier après la connexion
  • Implémentez un vérificateur de nom d'hôte personnalisé :
// In the ISomeService class:
HostnameVerifier customVerifier = new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        // Perform custom hostname verification, such as accepting the IP address (AAA.BBB.CCC.DDD).
        return true;
    }
};

HttpsURLConnection httpsConn = (HttpsURLConnection) url.openConnection();
httpsConn.setHostnameVerifier(customVerifier);
Copier après la connexion

Attention : La désactivation des vérifications HTTPS ou la mise en œuvre d'un vérificateur de nom d'hôte personnalisé peut compromettre la sécurité. Utilisez ces approches uniquement pour des tests ou dans des environnements contrôlés.

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!

source:php.cn
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