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

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

DDD
DDDoriginal
2024-11-08 02:18:02994parcourir

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]
}
  • 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);

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!

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