
Eu tenho alguns sites rodando em localhost com Apache/Ubuntu.
Acabei de instalar com sucesso certificados autoassinados para um deles, chame-o de securesite.local
. Outro site não SSL, ligue para ele insecuresite.local
também funciona conforme o esperado.
Isto é, se eu navegar para
https://securesite.local
http://insecuresite.local
Cada um deles oferece o conteúdo correto.
No entanto, se eu navegar até http://securesite.local
ele, ele exibirá conteúdo deinsecure.local
Meu /etc/hosts contém
127.0.1.1 securesite.local
127.0.1.1 insecuresite.local
/etc/apache2/apache2.conf contém
IncludeOptional sites-enabled/*.conf
Não contém nenhuma referência explícita a securesite ou insecuresite.
ls /etc/apache2/sites-enabled
securesite.conf insecuresite.conf
insecuresite.conf contém (abreviado aqui)
<VirtualHost insecuresite.local:80>
ServerName insecuresite.local
ServerAlias insecuresite.local
# ...
securesite.conf contém (abreviado aqui)
<VirtualHost securesite.local:443>
ServerName securesite.local
ServerAlias securesite.local
# ...
Quero que o Apache recuse conexões com securesite.local em qualquer porta diferente de 443, para não voltar a servir conteúdo de qualquer outro site que permita tráfego nesse localhost:80.
Por que isso está acontecendo e como posso impedi-lo?
Responder1
Com base no seu arquivo insecuresite.conf e securesite.conf, um está escutando na porta 80 e o outro na 443. Quando você acessahttp://securesite.local, seu navegador está solicitando dados da porta 80 e a única coisa servida na porta 80 é insecuresite.local.
Para corrigir isso, você precisaria definir um host virtual para securesite.local:80 e redirecioná-lo para https. Além disso, você precisará certificar-se de que possui NameVirtualHost *
seu arquivo apache2.conf.
Seus dois arquivos conf seriam parecidos com o seguinte:
<VirtualHost *:80>
ServerName insecuresite.local
ServerAlias insecuresite.local
# ...
e
<VirtualHost *:80>
ServerName securesite.local
ServerAlias securesite.local
Redirect permanent / https://securesite.local
# ...
<VirtualHost *:443>
ServerName securesite.local
ServerAlias securesite.local
# ...
Com a opção NameVirtualHost habilitada, o Apache examinará os ServerNames e ServerAliases e fornecerá os dados de acordo.
Responder2
Os soquetes são vinculados e as conexões são feitasEndereços IP, não nomes de host.Como ambos os vhosts têm endereços IP idênticos, há apenas um soquete de ouvinte para ambos, e o Apache não pode saber qual domínio será solicitado até quedepoisele aceitou a conexão – ele precisa receber a solicitação HTTP (ou o handshake TLS SNI).
Os arquivos de sites-enabled
são lidos em ordem ascibética, para que você possa configurar um vhost "substituto" em um arquivo chamado sites-enabled/00-default.conf
ou algo parecido. (Em outras palavras, liste-o antes de qualquer outro vhosts para o mesmo IP.)