HTTPS em nome de domínio separado do HTTP

2

Eu tenho uma única instância httpd do Apache 2.0 que gostaria de hospedar HTTP e HTTPS. Eles compartilham o mesmo endereço IP e HTTP viria na porta 80 e HTTPS na porta 443 (padrão). Eu tenho 2 domínios www.example.com e secure.example.com que apontam para esse endereço IP.

Agora, o problema: desejo apenas o tráfego HTTP para www.example.com e apenas o tráfego HTTPS para secure.example.com. Isso significa que não há HTTPS para www.example.com e nenhum HTTP para secure.example.com.

Meu httpd.conf parece

ServerName www.example.com
Listen 10.0.0.1:80
Listen 10.0.0.1:443

NameVirtualHost 10.0.0.1:80
NameVirtualHost 10.0.0.1:443

<VirtualHost 10.0.0.1:80>
    ServerName www.example.com
</VirtualHost>

<VirtualHost 10.0.0.1:443>
    ServerName secure.example.com
    SSLEnable # ... and other SSL stuff
</VirtualHost>

O que está acontecendo agora é que posso acessar os dois nomes de domínio usando HTTP e HTTPS. Eu procurei hospedagem virtual baseada em porta e hospedagem virtual baseada em nome e parece que o que eu tenho deveria funcionar. Eu não estou tentando hospedar vários domínios em SSL, então não há problema lá. Eu só quero que o usuário seja negado indo para www.example.com usando HTTPS e vice-versa para secure.example.com.

Isso é possível sem um alias de IP separado?

    
por plecong 07.10.2009 / 03:21

2 respostas

3

Resolver o HTTP para secure.example.com é fácil. Você acabou de criar um host virtual adicional para direcionar para HTTPS:

<VirutalHost 10.0.0.1:80>
    ServerName secure.example.com
    Redirect / https://secure.example.com/
</VirtualHost>

Resolver o HTTPS para www.example.com é mais difícil. O problema é que geralmente você não pode fazer hospedagem virtual baseada em nome com HTTPS. A razão é que a conexão SSL é configurada antes que o Apache saiba com qual host você está tentando se conectar, portanto, não sabe qual certificado SSL deve ser enviado, portanto, precisa enviar o primeiro que ele conhece. O resultado é que, se você tentar fazer o SSL com base em nome, receberá o certificado errado em cada host virtual, exceto um, e o navegador exibirá um erro para o usuário. Você pode contornar isso usando um certificado curinga para * .example.com ou usando um certificado com um Nome alternativo de assunto nele. Infelizmente, esses certificados custam mais dinheiro e você pode encontrar suporte desigual em clientes mais obscuros.

Você pode adicionar um virtualhost semelhante para HTTPS que você fez com HTTP:

<VirtualHost 10.0.0.1:443>
   ServerName www.example.com
   Redirect / http://www.example.com/
</VirtualHost>

Se você resolveu o problema SSL, isso funcionará sem erros. Se você não o fez, o cliente deve receber uma mensagem de erro sobre o nome do host que não corresponde ao certificado, mas deve redirecionar para http.

    
por 07.10.2009 / 10:08
0

Gostaria apenas de adicionar novos hosts virtuais com redirecionamentos

<VirtualHost 10.0.0.1:443>
   ServerName www.example.com
   Redirect / https://secure.example.com/
</VirtualHost>

<VirutalHost 10.0.0.1:80>
   ServerName secure.example.com
   Redirect / http://www.example.com/
</VirtualHost>
    
por 07.10.2009 / 03:28