web-dev-qa-db-fra.com

HTTPS HostName incorrect: devrait être <sous.domain.com>. Qu'est-ce qui cause cela?

Je reçois ce "mauvais nom d'hôte https": "erreur" lorsque vous essayez de vous connecter à un serveur à l'aide de HTTPS. Mon url a l'air comme ça

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 alors obtenez une erreur

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

Ceci est un code qui a travaillé dans le passé mais n'est plus. Il y a eu quelques modifications à l'architecture du système, mais j'ai besoin d'obtenir plus de données avant d'aborder ces responsables.

Que peut causer cette erreur? Puis-je éteindre le chèque d'UrlSpoofing?

21
paul

Il semble que le certificat SSL pour domain.com a été donné à Sub.Domain.com. Ou, plus probablement, que était renommé domain.com sur Sub.Domain.com sans mettre à jour le certificat SSL.

19
cletus

Cletus est juste à propos de la cause probable.

Il y a aussi un moyen d'éteindre la vérification des spoof.

Vous pouvez créer un objet qui implémente HostNameverifier qui revient en plus de circonstances que "habituelles".

Vous remplaceriez le nom d'hôte par défaut en appelant 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

Une note de plus: réfléchissez-y à deux fois avant de le faire. Vous créerez une faiblesse exploitable dans la sécurité entre vos composants client et votre serveur.

13
vkraemer

J'ai eu cette exception - Java.io.IOException: HTTPS hostname wrong: should be <localhost>.

Ma solution est que j'ai changé mon certificat auto-signé et faire le CN=localhost.

OR

Ajoutez votre certificat nom de domaine cn=<domain-name> à votre fichier d'hôte est probablement situé à C:/Windows/System32/Pilotes/etc /....

8

Ceci est juste une alternative de 'SvaRog' Post

static {

    HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals("domain name"));
}
0
jegadeesh

Java Par défaut vérifie que le certificat CN (nom commun) est identique à celui de l'hôte dans l'URL. Si le [~ # ~] cn [~ # ~ ~] Dans le certificat n'est pas identique à celui nom d'hôte, votre client de service Web échoue avec l'exception suivante: Java .IO.IOException: HTTPS HostName Mauvais: devrait être Nom d'hôte comme dans les certificats.

0
shanmugam

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

Ex:

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