¿Qué es un agujero SNI?

38

Anteriormente, Lone Learner preguntó ¿Por qué no hay un error de certificado al visitar google.net aunque presenta un certificado? emitido a google.com?

La respuesta aceptada explica que el problema fue causado por un SNI Hole .

  

Has caído en un "agujero SNI". Google presentará un certificado diferente si no hay una "Indicación del nombre del servidor" en la parte del protocolo de enlace TLS del cliente.
- StackzOfZtuff

El resultado de la búsqueda principal de "¿Qué es un agujero SNI" es la página de preguntas para < a href="https://security.stackexchange.com/q/91717/141087"> ¿Cuáles son las implicaciones de seguridad de habilitar un agujero SNI en un servidor web? , que no es mucha ayuda para aquellos que no están familiarizados con el término.

¿Qué es exactamente un agujero SNI?

    
pregunta Steven M. Vascellaro 10.07.2017 - 22:59
fuente

3 respuestas

37

SNI ( Indicación del nombre del servidor ) es una extensión TLS (Seguridad de la capa de transporte) en la que el cliente presenta el servidor Nombre de dominio para el objetivo al que desea acceder dentro del protocolo de enlace TLS. Se utiliza en los casos en los que hay varios servidores virtuales con diferentes certificados en la misma dirección IP, de modo que el servidor pueda presentar el certificado correcto.

En la medida en que es similar al encabezado de host HTTP en la solicitud HTTP, que se utiliza para seleccionar la configuración de host virtual correspondiente, solo el encabezado de Host no se puede usar para seleccionar el certificado ya que se envía dentro de la solicitud HTTP. (es decir, después de que el protocolo de enlace TLS ya está hecho).

Como la extensión SNI TLS es opcional, es posible que algunos clientes no envíen esta extensión. Este es el caso con openssl s_client sin el argumento -servername , pero también con muchas bibliotecas TLS en diferentes lenguajes de programación. Y mientras que todos los navegadores modernos usan SNI, los navegadores más antiguos como IE8 en XP no lo usan.

Si tal cliente se conecta a un servidor que tiene múltiples certificados, el servidor no sabe qué certificado realmente necesita el cliente, es decir, el cliente cae en el "agujero SNI" al no usar la extensión SNI. En este caso, el servidor generalmente devuelve un error (o algunas veces simplemente cierra la conexión) o usa un certificado predeterminado configurado explícita o implícitamente para este propósito.

    
respondido por el Steffen Ullrich 10.07.2017 - 23:21
fuente
11

Un agujero SNI es cuando tiene un sitio predeterminado configurado para una dirección IP que no requiere que SNI esté presente para completar una conexión HTTPS.

Esto es, de hecho, cómo todas las conexiones HTTPS solían funcionar, antes de que existiera SNI. Cada sitio HTTPS requería una dirección IP enrutable, no solo un nombre de host. Por lo tanto, cuando se configura de esta manera, cualquier solicitud del puerto 443 a esa dirección IP se resolverá en ese sitio, incluso si tiene muchos sitios HTTP (puerto 80) que usan nombres de host virtuales. Este fue un problema perenne para las personas que reutilizaron los servidores web para varios sitios y luego decidieron configurar SSL / HTTPS para uno. Si ejecuta http://example.com y http://contoso.com en el mismo servidor, y luego configura HTTPS para example.com, los resultados para http://contoso.com seguirán funcionando correctamente, pero las solicitudes para https://contoso.com devolverán los resultados de https://example.com , aunque con un error de certificado.

Lo que estás viendo aquí es efectivamente lo mismo. Si no envía la extensión SNI que indica a los servidores de Google a qué nombre de host está intentando conectarse, el valor predeterminado para las direcciones IP del servidor web de Google es el sitio google.com , por lo que, independientemente del nombre de host al que esté intentando conectarse, Será google.com que responderá.

    
respondido por el Xander 10.07.2017 - 23:19
fuente
1

Se contactó con un servidor SNI que en realidad tiene más de un dominio SSL con un cliente que no es SNI. El servidor adivinó mal.

La misma historia básica cuando se contacta con un servidor HTTP / 1.1 con un cliente HTTP / 1.0. El servidor adivina.

    
respondido por el Joshua 10.07.2017 - 23:04
fuente

Lea otras preguntas en las etiquetas