SSL e ServerAlias em um servidor Apache com vários domínios

4

Eu tenho um servidor virtual para o qual gostaria de apontar dois domínios, ambos apontando para sites diferentes.

Por exemplo, example1.com vai para /var/www/example1 . example2.com vai para /var/www/example2 .

Eu posso fazer isso muito bem com o VirtualHosts:

<VirtualHost *:80>
    ServerName example1.com
    DocumentRoot "/var/www/example1"
</VirtualHost>

<VirtualHost *:80>
    ServerName example2.com
    DocumentRoot "/var/www/example2"
</VirtualHost>

Minha primeira pergunta é sobre o www . Para ativar o suporte para o www , acabei de adicionar um ServerAlias :

<VirtualHost *:80>
    ServerName example1.com
    ServerAlias www.example1.com
    DocumentRoot "/var/www/example1"
</VirtualHost>

Esta é a melhor maneira de fazer isso?

Minha segunda pergunta envolve SSL. Também gostaria que example2.com fosse acessado via SSL: https://example2.com . Eu emiti o certificado, etc, mas como eu conseguiria isso no meu arquivo httpd.conf ? No momento, tenho uma solução temporária. Acabei de alterar o principal DocumentRoot do servidor para apontar para este /var/www/example2 . Eu entendo que o SSL está em uma porta diferente, por isso não será interpretado pela definição do VirtualHost, então eu fiz isso como uma solução rápida. No entanto, gostaria de saber qual é a melhor maneira de fazer isso?

    
por Oliver Joseph Ash 06.03.2012 / 23:02

2 respostas

8
  1. yes - ServerAlias é o modo padrão para conseguir isso. Às vezes é preferível selecionar o www.myserver.com como a identidade "mais preferida" e ter "myserver.com" como o alias, mas isso realmente não faz diferença a menos que você possa canonizar (converter links para os favoritos) URLs em algum momento .

    2.

Edit: parece que eu não entendi a pergunta do OP, então isso é principalmente irrelevante

resposta curta (para hospedar vários sites SSL em um servidor apache)

  • a solução mais simples, é um host virtual baseado em IP ... suporta todos os navegadores - pergunte ao seu ISP por um segundo endereço IP. Então você tem 1 IP por certificado SSL. Veja abaixo, por exemplo, configuração.

  • Indicação do nome do servidor - não safari XP ou antigo ou android antigo - funciona apenas com 1 IP - link

Resposta longa (e garoto que me deixei levar com essa resposta ... ;-) aqui está uma rápida introdução sobre SSL e nome de hostings virtuais ....

Hospedagem virtual baseada em nome, é uma estratégia de compartilhar o servidor da web entre sites baseados no cabeçalho "Host" apresentado pelo cliente (ou seja, o navegador da Web, etc.).

Esta é uma extensão HTTP 1.1 e, para usá-la, o apache lê o conteúdo da solicitação e analisa o cabeçalho, ou seja, é assim:

GET /index.htm HTTP/1.1
Accept: image/png,image/*;q=0.8,*/*;q=0.5
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:8.0) Gecko/20100101 Firefox/8.0
Host: www.google.co.uk            <--  apache checks this value 

No entanto, com o handshake TLS usado em conexões SSL, o servidor se identifica antes que o cabeçalho do host seja enviado, usando o campo "nome comum" no certificado SSL.

Por isso (usando o tradicional ... SSL v1, navegadores antigos etc, Windows XP) só pode haver 1 identidade SSL por endereço IP, porque a primeira coisa que o servidor faz é se identificar como www.amazon.com, o que não pode mudar depois ...

Basicamente, as diferenças são assim, em solicitações normais de link

client: hello server   
server: hello client   
client: please give me web XXX   
server: here is websiteXXX    

mas para solicitações https: // é mais assim:

client: hello server   
server: I am website XXX   
client: ok, go ahead and give me website XXX   
server: here is websiteXXX   

Então, basicamente, para um "suporte a todos os navegadores", incluindo soluções antigas, você precisa perguntar ao seu provedor por outro endereço IP público e vincular seu segundo host virtual ao segundo ip do primeiro ...

No entanto, existem algumas alternativas, que permitem várias identidades SSL em um único endereço IP que funcionam na maioria dos navegadores modernos, por exemplo, certificados SNI ou curingas.

  • certs curinga, não é adequado nesta situação particular porque os nomes dos servidores são de nível de domínio, por exemplo, badger.com e monkey.com, em vez de badger.server.com e monkey.server.com

no entanto, com Indicação do nome do servidor , você diz ao servidor qual Host deseja, durante o processo de handshake e o servidor podem fornecer o certificado correto. Parece que o servidor voltará ao certificado padrão , portanto, pode ser uma boa estratégia quando você tem um site SSL "primário" e um menos importante, que pode aceitar alguma perda de solicitações do usuário .

Basicamente, as diretivas para adicionar hosts virtuais SSL são semelhantes, exceto que você está adicionando apenas Hosts virtuais simples, em vez de NameVirtualHosts.

#if not done elsewhere in httpd.conf incldue these
Listen 443
LoadModule ssl_module   modules/mod_ssl.so

#this does work for wildcard SSL certs like *.myserver.com (and SNI???)
NameVirtualHost *:443

<VirtualHost 1.1.1.1:443>
  SSLEngine On
  ServerName address1.com
  DocumentRoot /var/www/adderss2
  SSLCertificateFile /etc/httpd/conf/domaina_ssl/zimbra.zmb.moc.crt
</VirtualHost>

<VirtualHost 1.1.1.2:443>
  SSLEngine on
  ServerName address2.com
  DocumentRoot /var/www/adderss2
  SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>
    
por 06.03.2012 / 23:25
1

Seu ServerAlias para www é perfeitamente normal; não se preocupe. Se você quiser se interessar, você pode configurar um RewriteRule para direcionar o tráfego de www.example.com para example.com, ou vice-versa. Quanto ao suporte a SSL, use definições separadas do VirtualHost para seus hosts virtuais: 80 e: 443.

    
por 06.03.2012 / 23:24