Virtualhost um site https, o resto http

1

Eu tenho um servidor linode com o Apache2 rodando um punhado de sites com virtualhosting.

Todos os sites funcionam bem na porta 80, mas um site tem um certificado ssl e também é executado corretamente.

Meu problema é o seguinte:

Os sites que não são https, se visitarem o link , exibem o conteúdo do único site seguro ...

Existe uma maneira de desativar a correspondência *: 443 para esses sites não seguros?

Obrigado!

EDIT (mais informações):

Veja uma configuração típica em sites disponíveis para um site http normal e inseguro:

<VirtualHost *:80>
  ServerName  www.insecure.com
  ServerAlias insecure.com

  ...

</VirtualHost>

O site https seguro é o seguinte:

<VirtualHost *:80>
   ServerName www.secure.com
   Redirect permanent / https://secure.com/
</VirtualHost>

<VirtualHost *:80>
   ServerName secure.com
   RedirectMatch permanent ^/(.*) https://secure.com/$1
</VirtualHost>

<VirtualHost *:443>
   SSLEngine on
   SSLProtocol all

   SSLCertificateChainFile ...
   SSLCertificateFile ...
   SSLCertificateKeyFile ...
   SSLCACertificateFile ...

   ServerName  secure.com
   ServerAlias secure.com

   ...

</VirtualHost>

Então, visitando:

  • link
  • link
  • link
  • link
  • link
por RJP1 27.06.2013 / 21:25

3 respostas

0

Os documentos do Apache sugerem a especificação do número da porta não-SSL na linha NameVirtualHost, como isso:

NameVirtualHost 192.168.1.1:80

Isso ajuda? Deve parar a correspondência de sites não seguros. Caso contrário, tente mover o site seguro para ser o primeiro dos VirtualHosts.

    
por 28.06.2013 / 13:36
0

O problema é que o HTTPS não usa o cabeçalho do host, já que a troca de certificados acontece quando o cliente se conecta ao 443. Então, enquanto você pode usar mod_rewrite para redirecionar https://insecure.com de volta para http://insecure.com baseado no HTTP_HOST. será depois que o usuário receber o aviso de certificado sobre incompatibilidade de nome de host.

Mas algo como isso deve funcionar no seu bloco de configuração https

RewriteCond %{HTTP_HOST}   !^secure\.com [NC]
RewriteCond %{HTTP_HOST}   !^$
RewriteRule ^/(.*)         http://%{HTTP_HOST}/$1 [L,R]
    
por 28.06.2013 / 13:49
0

Como Peter disse, ligue o VirtualHost a um IP explícito. Se você tem vários IPs que devem resolver seu problema ali mesmo.

Se você estiver executando em um único IP, certifique-se de definir um nome de servidor explícito no seu: 443 VirtualHost (s).

Lembre-se também de que o Apache possui VirtualHosts padrão, que também podem estar funcionando contra você. O que quer que o VirtualHost seja definido primeiro para uma determinada porta, torna-se o padrão. Eu frequentemente me vejo definindo VirtualHosts explícitos para explicar isso. Talvez no seu cenário você possa criar um VirtualHost descartável e conectar um certificado auto-assinado. Isso deve permitir que seus sites definidos explicitamente vivam por conta própria.

Edit: Eu retiro meu comentário sobre o ServerName depois de levar em consideração o comentário do Doon.

Você pode querer olhar para NameBasedSSLVHosts no wiki do Apache, mas eu não acho que isso resolve o seu problema desde Parece pelos seus exemplos diferentes domínios são usados. Isso funcionaria se fossem subdomínios compartilhando um certificado curinga.

    
por 28.06.2013 / 13:48