¿Por qué la versión no SSL de mi host Apache habilitado para SSL sirve contenido de un host diferente?

¿Por qué la versión no SSL de mi host Apache habilitado para SSL sirve contenido de un host diferente?

Tengo un par de sitios web ejecutándose en localhost con Apache/Ubuntu.

Acabo de instalar con éxito certificados autofirmados para uno de estos, llámelo securesite.local. Otro sitio que no es SSL, llámelo insecuresite.localtambién funciona como se esperaba.

Es decir, si navego a

https://securesite.local
http://insecuresite.local

Cada uno de estos ofrece el contenido correcto.

Sin embargo, si navego hasta http://securesite.localallí, ofrece contenido deinsecure.local

Mi /etc/hosts contiene

127.0.1.1 securesite.local
127.0.1.1 insecuresite.local

/etc/apache2/apache2.conf contiene

IncludeOptional sites-enabled/*.conf

No contiene ninguna referencia explícita a un sitio seguro o un sitio inseguro.

ls /etc/apache2/sitios habilitados

securesite.conf insecuresite.conf

insecuresite.conf contiene (abreviado aquí)

<VirtualHost insecuresite.local:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

Securesite.conf contiene (abreviado aquí)

<VirtualHost securesite.local:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

Quiero que Apache rechace conexiones a Securesite.local a través de cualquier puerto que no sea 443, para no recurrir a servir contenido de ningún otro sitio que permita el tráfico en ese localhost:80.

¿Por qué sucede esto y cómo puedo detenerlo?

Respuesta1

Según sus archivos insecuresite.conf y Securesite.conf, uno escucha en el puerto 80 y el otro en el 443. Cuando vaya ahttp://sitioseguro.local, su navegador solicita datos del puerto 80 y lo único que se sirve en el puerto 80 es insecuresite.local.

Para solucionar este problema, deberá definir un host virtual para Securesite.local:80 y redirigirlo a https. Además, deberá asegurarse de tenerlo NameVirtualHost *en su archivo apache2.conf.

Sus dos archivos conf se verían así:

<VirtualHost *:80>
    ServerName insecuresite.local
    ServerAlias insecuresite.local
    # ...

y

<VirtualHost *:80>
    ServerName securesite.local
    ServerAlias securesite.local
    Redirect permanent / https://securesite.local
    # ... 
<VirtualHost *:443>
    ServerName securesite.local
    ServerAlias securesite.local
    # ...

Con la opción NameVirtualHost habilitada, Apache examinará los nombres de servidor y los alias de servidor y entregará los datos en consecuencia.

Respuesta2

Los enchufes están vinculados y las conexiones se realizan aDirecciones IP, no nombres de host.Dado que ambos vhosts tienen direcciones IP idénticas, solo hay un socket de escucha para ambos y Apache no puede saber qué dominio se solicitará hasta quedespuésha aceptado la conexión; tiene que recibir la solicitud HTTP (o el protocolo de enlace TLS SNI).

Los archivos de sites-enabledse leen en orden ascíbético, por lo que puede configurar un vhost "alternativo" en un archivo con nombre sites-enabled/00-default.confo algo así. (En otras palabras, inclúyalo antes que cualquier otro host virtual para la misma IP).

información relacionada