Por que a versão não SSL do meu host Apache habilitado para SSL está servindo conteúdo de um host diferente?

Por que a versão não SSL do meu host Apache habilitado para SSL está servindo conteúdo de um host diferente?

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.localtambé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.localele, 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-enabledsão lidos em ordem ascibética, para que você possa configurar um vhost "substituto" em um arquivo chamado sites-enabled/00-default.confou algo parecido. (Em outras palavras, liste-o antes de qualquer outro vhosts para o mesmo IP.)

informação relacionada