Conflicto entre los dominios proporcionados por SNI y HTTP

22

Recientemente, trasladé un sitio web de WordPress con una pequeña tienda de un proveedor de alojamiento a un servidor propio con Ubuntu Server 12.04.2 LTS y Apache 2.2.22. Requiero SSL para la tienda. Configuré un par de vhosts simples en una nueva IP para el servidor, un enlace al puerto 80 de la IP específica y el otro enlace al puerto 443. Ambos tienen ServerName www.example.comy ServerAlias example.comen la configuración de vhost. Tengo SSLStrictSNIVHostCheck off.

El sitio funciona muy lento, pero funciona. Recibo lo siguiente en mis registros de errores.

[Error] Hostname example.com provided via SNI and hostname www.example.com provided via HTTP are different

Espero que la lentitud esté relacionada con el mensaje anterior. ¿Alguna idea de por qué está apareciendo y qué puedo hacer al respecto?

flickerfly
fuente

Respuestas:

24

Mire su registro de acceso (no el registro de errores). Con la hora y la fecha del error, debería poder identificar la solicitud ofensiva y averiguar el agente de usuario. En mi caso, fue un bot:

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.2)"

Mi servidor responde con HTTP 400: Solicitud incorrecta.

A menos que me equivoque, en las negociaciones de TLS, el cliente envía el nombre del host dos veces: una vez ANTES de establecer la conexión SSL en el SNI (Indicación del nombre del servidor) y una vez DESPUÉS en la solicitud HTTP real. Si los nombres del servidor no coinciden, esto indicaría un cliente dañado y no debería tener nada que ver con la configuración de su servidor.

Tal vez arreglen su bot algún día, mientras tanto, probablemente puedas ignorarlo. Dudo que esto pueda causar lentitud en el host, a menos que las solicitudes lleguen a una velocidad muy alta.

Arno Schäfer
fuente
11

Quizás algunos clientes evocan este error intencionalmente para probar vulnerabilidades de su servidor. He encontrado que una solicitud de researchscan367.eecs.umich.eduprovocó el error en un servidor que mantengo. En este caso, es bueno que ocurra el error.

Tenía curiosidad por saber qué tipo de ataques son posibles, y formulé esta pregunta en Security Stack Exchange: ¿Qué tipo de ataque es evitado por el código de error AH02032 de Apache2?

jknappen - Restablecer a Monica
fuente
1

Suena como un problema del cliente a primera vista ... ¿Qué navegador está causando este problema?

El mensaje sugeriría que el nombre de host que envía el cliente durante la configuración de la conexión SSL no es el mismo que el cliente envía en la solicitud HTTPS una vez que la capa SSL está activa.

alxgomz
fuente
No sé qué está causando esto. El error no informa la información del cliente. Solo sé que estoy viendo esto regularmente. Esperaba que ServerAlias ​​fuera suficiente para hacerlo feliz, ya que en teoría el servidor sabe que www.dominio.com y dominio.com son equivalentes.
flickerfly
@flickerfly Sí, este es un cliente con errores, y no puede hacer mucho a menos que pueda identificarlo.
Michael Hampton
2
De acuerdo, simplemente deshabilité SNI eliminando la directiva NameBasedVirtualHost para el puerto 443. Supongo que no la necesito en este momento. Creo que eso debería funcionar.
flickerfly
1

En mi caso, la creación de un nuevo host virtual con un guión bajo era el problema. Tengo un certificado SSL comodín.

No funcionó:

<VirtualHost *:443>
        SSLEngine on
        ServerName sub_domain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>

Aunque Apache se reinició correctamente, obtuve errores HTTP 400. En el registro de errores:

[Wed Sep 05 11:28:00.349960 2018] [ssl:error] [pid 19906:tid 140392626808576] AH02031: Hostname sub_domain.example.com provided via SNI, but no hostname provided in HTTP request

Pero eliminar el guión bajo funcionó:

<VirtualHost *:443>
        SSLEngine on
        ServerName subdomain.example.com
        Redirect / https://www.example.com/restofmyredirectlink
</VirtualHost>
MS Berends
fuente
1
Bienvenido a ServerFault. Poner guiones bajos en los nombres de host va en contra de los RFC y se romperá de varias maneras. stackoverflow.com/questions/2180465/…
pollitos del
1
¡Exactamente! Por eso ahora también está aquí como referencia.
MS Berends
0

Verifique su archivo / etc / hosts para ver si está asignando el nombre de dominio a una dirección IP local (interna). No olvide reiniciar el demonio de caché del servicio de nombres después de cambiar / etc / hosts service nscd restart

Jim Da Otter
fuente