Debido a la naturaleza de cómo funciona SSL, el protocolo de enlace SSL / TLS se realiza antes de que el nombre de host deseado se entregue al servidor web. Esto significa que el certificado predeterminado (primero) se usa cuando se intenta acceder al sitio, independientemente del nombre de dominio utilizado.
Esto es cierto tanto con Apache como con nginx.
De la Apache Wiki :
Como regla general, es imposible alojar más de un host virtual SSL en
La misma dirección IP y puerto. Esto es porque Apache necesita saber el
Nombre del host para elegir el certificado correcto para la configuración.
La capa de cifrado. Pero el nombre del host que se solicita es
contenida solo en los encabezados de solicitud HTTP, que forman parte de la
contenido encriptado Por lo tanto, no está disponible hasta después de la
El cifrado ya está negociado. Esto significa que la correcta
no se puede seleccionar el certificado y los clientes recibirán el certificado
advertencias de falta de coincidencia y ser vulnerables a los ataques de intermediarios.
De la documentación de nginx :
Con esta configuración, un navegador recibe el servidor predeterminado
Certificado, es decir, www.example.com independientemente del servidor solicitado
nombre. Esto es causado por el comportamiento del protocolo SSL. La conexión SSL es
establecido antes de que el navegador envíe una solicitud HTTP y nginx hace
No se conoce el nombre del servidor solicitado. Por lo tanto, sólo puede
ofrece el certificado del servidor predeterminado.
¿Cómo puedes resolver este problema?
La solución más sencilla es usar direcciones IP separadas para cada sitio que desee proteger.
Si esto no es posible, podría ser posible resolver el problema utilizando Indicación del nombre del servidor (SNI, RFC 6066 ). Esto permite que un navegador pase el nombre de dominio al servidor durante el protocolo de enlace.
Tanto Nginx como Apache admiten SNI. Puede encontrar más información sobre nginx SNI en la documentación .
Vale la pena señalar que SNI solo se puede usar para nombres de dominio y no para direcciones IP. Debe tomar precauciones adicionales al configurar sus servidores web para abordar este problema, por lo que cualquier solicitud a la IP se gestiona correctamente.
Solo los nombres de dominio pueden pasarse en SNI, sin embargo, algunos navegadores pueden
Pasar erróneamente una dirección IP del servidor como su nombre si una solicitud
Incluye la dirección IP literal. Uno no debe confiar en esto.
El Wiki de Apache tiene más información sobre la implementación de SNI . Pero incluso su documentación informa que esta solución no es perfecta.
El uso de hosts virtuales basados en nombres con SSL agrega otra capa de
complicación. Sin la extensión SNI, generalmente no es posible
(aunque un subconjunto de host virtual podría funcionar). Con SNI, es necesario.
considerar la configuración cuidadosamente para garantizar la seguridad es
mantenido.
Dicho esto, puedes ver cómo esta configuración no es tan simple como los hosts virtuales normales. Para poder encontrar una solución a su problema, deberíamos conocer más detalles sobre su configuración y el comportamiento esperado cuando se envía una solicitud de IP.
En general, para "bloquear" un dominio no configurado o una solicitud de IP, debe configurarlo como el sitio predeterminado y luego mostrar un error, redirigir, salir, etc.