Como evito que o Apache atenda um site HTTPS quando ele não corresponde ao VirtualHost Name solicitado?

2

Estou usando o Apache2 e nomeei hosts virtuais para atender dois dotcoms diferentes ( exampleone.com e exampletwo.com ) de um endereço IP. Um site ( exampleone.com deve ser HTTP e HTTPS, enquanto o outro ( example2.com ) deve exibir somente HTTP.

Até o momento, consegui que seus respectivos sites HTTP funcionassem conforme o esperado e consegui que o HTTPS funcionasse para o site pretendido. No entanto, quando vou para https://exampletwo.com , estou sendo veiculado https://exampleone.com content e avisos de segurança.

Como faço para que as solicitações https://exampletwo.com sejam rejeitadas?

<VirtualHost 1.2.3.4:80>
    ServerName exampleone.com
    ServerAlias *.exampleone.com
    DocumentRoot /var/www/exampleone.com
    <Directory /var/www/exampleone.com>
            Options MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
    CustomLog /var/log/apache2/exampleone.log combined
</VirtualHost>

<VirtualHost 1.2.3.4:80>
    ServerName exampletwo.com
    ServerAlias *.exampletwo.com
    DocumentRoot /var/www/exampletwo.com
    <Directory /var/www/exampletwo.com>
            Options MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>
    CustomLog /var/log/apache2/exampletwo.log combined
</VirtualHost>

<IfModule mod_ssl.c>
<VirtualHost 1.2.3.4:443>
    ServerAdmin [email protected]
    ServerName exampleone.com
    ServerAlias *.exampleone.com

    DocumentRoot /var/www/exampleone.com

    <Directory /var/www/exampleone.com>
            Options MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    CustomLog /var/log/apache2/exampleone-ssl.log combined

    #   SSL Engine Switch:
    #   Enable/Disable SSL for this virtual host.
    SSLEngine on

    #   A self-signed (snakeoil) certificate can be created by installing
    #   the ssl-cert package. See
    #   /usr/share/doc/apache2.2-common/README.Debian.gz for more info.
    #   If both key and certificate are stored in the same file, only the
    #   SSLCertificateFile directive is needed.
    SSLCertificateFile    /etc/ssl/certs/exampleone.com.crt
    SSLCertificateKeyFile /etc/ssl/private/exampleone.com.key
</VirtualHost>
</IfModule>
    
por STW 02.07.2013 / 19:14

2 respostas

2

EDIT: como outro apontado, veja SNI

Como explicado Aqui , um servidor que está sendo contatado via https não pode adivinhar antes de enviar seu certificado que nome de domínio o cliente deseja falar com.

Se http://exampleone.com for servido por https, significa que a primeira coisa que um visitante obterá desse servidor será "Oi, meu certificado é válido para o nome link ", mesmo se você quiser http://exampletwo.com . Assim, você não pode desativar https para http://exampletwo.com , nem configurar um redirecionamento ou o que não levaria a um aviso para o visitante.

Mais explicações aqui

Para resolver sua preocupação, você precisa de dois endereços IP diferentes para veicular seus dois nomes de domínio.

    
por 02.07.2013 / 21:06
2

Você pode ativar o SNI. Tudo o que você precisa fazer é incluir um NameVirtualHost *:443 com sua instrução Listen 443 (na configuração do ubuntu do apache, adicione-o ao /etc/apache/ports.conf). Você pode então configurar um segundo host virtual SSL e dar a ambos um ServerName .

Nota: navegadores antigos não suportam SNI. Nenhuma versão do IE no Windows XP, por exemplo. Nesse caso, o endereço IP por restrição de site que o usuário2299bla menciona é válido.

    
por 02.07.2013 / 21:12