El nombre de host de HTTPS es incorrecto: debería ser < sub.domain.com > ;. ¿Qué causa esto?

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

  •  05-07-2019
  •  | 
  •  

Pregunta

Recibo el error 'Nombre de host HTTPS incorrecto:' cuando intento conectar con un servidor usando https. Mi url se ve algo como esto

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

Me conecto usando el siguiente código

    // 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());

pero luego recibe un error

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

Este es un código que ha funcionado en el pasado pero ya no. Ha habido algunos cambios en la arquitectura del sistema, pero necesito obtener más datos antes de acercarme a los responsables.

¿Qué puede causar este error? ¿Puedo desactivar la comprobación de URLSpoofing?

¿Fue útil?

Solución

Parece que el certificado SSL para domain.com ha sido otorgado a sub.domain.com. O, más probablemente, lo que era domain.com ha cambiado de nombre a sub.domain.com sin actualizar el certificado SSL.

Otros consejos

cletus tiene razón sobre la causa probable.

También hay una forma de desactivar la comprobación de la parodia.

Puede crear un objeto que implemente HostnameVerifier que devuelve true en más circunstancias que 'usual'.

Reemplazaría el HostnameVerifier predeterminado llamando a setHostnameVerifier en el objeto de conexión en el código de la pregunta.

Esta respuesta se inspiró en: http://www.java -samples.com/showtutorial.php?tutorialid=211

Encontré ese enlace con esta consulta: http: / /www.google.com/search?q=https+hostname+wrong+should+be

Una nota más: piénselo dos veces antes de hacer esto. Creará una debilidad explotable en la seguridad entre sus componentes de cliente y servidor.

Obtuve esta excepción - java.io.IOException: HTTPS nombre de host incorrecto: debería ser < localhost > .

Mi solución es que cambié mi certificado autofirmado y hago el CN = localhost .

O

Agregue su certificado nombre de dominio cn = < domain-name > a su archivo host ubicado probablemente en c: / windows / system32 / drivers / etc /...

El siguiente código resolvió mi problema

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

Utilice el nombre de host (nombre de DNS) como nombre de alias.

Ej:

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

Java verifica de forma predeterminada que el certificado CN (Nombre común) es el mismo que el nombre de host en la URL. Si el CN en el certificado no es el mismo que el nombre de host , su cliente de servicio web falla con la siguiente excepción: java.io.IOException: HTTPS nombre de host incorrecto: debería ser el nombre de host como en los certificados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top