Nom d'hôte HTTPS incorrect: doit être < sub.domain.com > ;. Qu'est-ce qui cause ça?

StackOverflow https://stackoverflow.com/questions/1802051

  •  05-07-2019
  •  | 
  •  

Question

Je reçois le message d'erreur 'nom d'hôte HTTPS incorrect' lorsque j'essaie de me connecter à un serveur à l'aide de https. Mon URL ressemble à ceci

https://sub.domain.com/tamnode/webapps/app/servlet.

Je me connecte à l'aide du code suivant

    // Create a URLConnection object for a URL
    URL url = new URL(requestedURL);
    HttpURLConnection.setFollowRedirects(false);

    // connect
    connection = (HttpURLConnection) url.openConnection();
    connection.setDoOutput(true);
    connection.setRequestProperty("User-Agent", USER_AGENT); //$NON-NLS-1$

    OutputStreamWriter wr = new OutputStreamWriter(connection
            .getOutputStream());

mais obtenez une erreur

IOException: HTTPS hostname wrong:  should be <sub.domain.com>. 
    at sun.net.www.protocol.https.HttpsClient.checkURLSpoofing
    ....

C'est un code qui a fonctionné dans le passé, mais plus maintenant. Quelques modifications ont été apportées à l'architecture du système, mais je dois obtenir davantage de données avant de contacter les responsables.

Qu'est-ce qui peut causer cette erreur? Puis-je désactiver la vérification URLSpoofing?

Était-ce utile?

La solution

Il semble que le certificat SSL pour domain.com ait été attribué à sub.domain.com. Ou, plus probablement, ce qui était domain.com a été renommé sub.domain.com sans mettre à jour le certificat SSL.

Autres conseils

cletus a raison sur la cause probable.

Il existe également un moyen de désactiver la vérification d'usurpation.

Vous pouvez créer un objet qui implémente HostnameVerifier qui renvoie la valeur true dans davantage de circonstances que la normale.

Pour remplacer le nom d'hôte par défaut, appelez setHostnameVerifier sur l'objet de connexion dans le code de la question.

Cette réponse a été "inspirée par": http://www.java -samples.com/showtutorial.php?tutorialid=211

J'ai trouvé ce lien avec cette requête: http: / /www.google.com/search?q=https++hostname+wrong+should+be

Encore une remarque: réfléchissez-y à deux fois avant de le faire. Vous allez créer une faiblesse exploitable dans la sécurité entre vos composants client et serveur.

J'ai cette exception - java.io.IOException: nom d'hôte HTTPS incorrect: doit être < localhost > .

.

Ma solution est de modifier mon certificat auto-signé et de créer le CN = localhost .

OU

Ajoutez le nom de domaine de votre certificat cn = < nom de domaine > à votre fichier hôte probablement situé à c: / windows / system32 / drivers / etc /...

Le code suivant a résolu mon problème

static {
    //for localhost testing only
    javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
            new javax.net.ssl.HostnameVerifier() {

        @Override
        public boolean verify(String hostname,
                javax.net.ssl.SSLSession sslSession) {
            if (hostname.equals("your_domain")) {
                return true;
            }
            return false;
        }
    });
}

Utilisez le nom d'hôte (nom DNS) comme nom d'alias.

Ex:

keytool -import -alias <google.com> -file certificate_one.cer -keystore cacerts

Java par défaut vérifie que le CN (nom commun) du certificat est identique au nom d'hôte dans l'URL. Si le CN du certificat diffère du nom d'hôte , votre client de service Web échoue avec l'exception suivante: java.io.IOException: nom d'hôte HTTPS incorrect: devrait être hostname comme dans les certificats.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top