Hosts virtuais e HTTPS nomeados pelo Apache

1

Eu tenho um certificado SSL válido para vários (sub) domínios. No Apache, configurei isto da seguinte forma:

Em /etc/apache2/apache2.conf

NameVirtualHost <my ip>:443

Então, para um host virtual nomeado, eu tenho

<VirtualHost <my ip>:443>
    ServerName ...

    SSLEngine on
    SSLCertificateFile ...
    SSLCertificateKeyFile ...
    SSLCertificateChainFile ...
    SSLCACertificateFile ...
</VirtualHost>

Por fim, para qualquer outro site que eu queira estar acessível por HTTPS, eu só tenho um

<VirtualHost <my ip>:443>
    ServerName ...
</VirtualHost>

A boa notícia é que funciona. No entanto, quando eu inicio o Apache, recebo mensagens de aviso

[warn] Init: SSL server IP/port conflict: Domain A:443 (...) vs. Domain B:443 (...)
[warn] Init: SSL server IP/port conflict: Domain C:443 (...) vs. Domain B:443 (...)
[warn] Init: You should not use name-based virtual hosts in conjunction with SSL!!

Então, minha pergunta é: como devo configurar isso? Claramente, a partir das mensagens de aviso estou fazendo algo errado (embora funcione!), No entanto, a configuração acima foi a única que eu poderia começar a trabalhar. É um pouco irritante, pois os arquivos de configuração têm uma dependência explícita do meu endereço IP.

    
por Freddie Witherden 28.12.2010 / 19:17

4 respostas

1

A configuração está certa.

Apache late porque acha que é um erro da sua parte ter mais SSL VirtualHosts com o mesmo certificado (porque na maioria das vezes, configurações como esta se manifestam como um erro de certificado no cliente). Você pode ignorar as mensagens de aviso, principalmente porque, como você disse, funciona do jeito que você quer.

Se você quiser que a configuração seja independente do endereço IP, você pode especificar

<VirtualHost *:80>

nos seus arquivos de configuração. Naturalmente, você terá que ter a entrada NameVirtualHost correspondente:

NameVirtualHost *:80
    
por 28.12.2010 / 21:23
0

você pode usar o mesmo certificado em cada diretiva do VirtualHost e definir também a configuração do seu servidor - basicamente combine o que você escreveu acima.

a diretiva NameVirtualHost é usada para o tráfego NON ssl quando você deseja que o apache examine os cabeçalhos de entrada e a rota com base na cadeia Host enviada pelo cliente para o servidor virtual real.

    
por 28.12.2010 / 19:22
0

Você só pode ter um site https por soquete, portanto, é necessário alterar a porta do VHost e associá-la ao novo certificado. Se todos esses sites precisarem ser executados na porta 443, você precisará de mais IPs.

    
por 28.12.2010 / 19:56
0

Você pode usar nginx em vez de ou na frente do apache.

A maioria dos servidores web (apache, iis, etc.) não funciona adequadamente com hosts ssl nomeados porque eles determinam o website virtual antes de determinar qual certificado ssl usar, negociar, etc. O negócio SNI é uma espécie de hack isso não funciona com muitos navegadores.

O nginx, no entanto, nomeia os hosts SSL com base graciosamente, porque permite associar o certificado ao IP / port e, em seguida, inspecionar o cabeçalho do host para determinar para onde rotear o pedido. O destino pode ser servido por nginx ou reverse proxied para apache, iis, outras máquinas, o que for .. É o canivete suíço de solicitações tcp / ip recebidas. Ele tem muitos dos mesmos recursos de descarregamento e redirecionamento de SSL normalmente feitos com balanceadores de carga de hardware, incluindo balanceamento de carga simples.

    
por 28.12.2010 / 20:27