
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.local
tambié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.local
allí, 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-enabled
se leen en orden ascíbético, por lo que puede configurar un vhost "alternativo" en un archivo con nombre sites-enabled/00-default.conf
o algo así. (En otras palabras, inclúyalo antes que cualquier otro host virtual para la misma IP).