Como ajustar o Apache para mostrar apenas um host no protocolo HTTPS

1

Eu tenho um servidor Web Apache no FreeBSD e quero vincular SSL apenas a um dos muitos domínios. Agora minha configuração é

NameVirtualHost *:80

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

Tudo ok, mas no navegador no link mostra as páginas do site ssldomain.com. Isso é ruim.

Como posso ajustar o Apache para evitar a exibição de páginas do ssldomain.com no link no navegador.

UPD: Eu estava tentando definir VirtualHosts: 80 e: 443 para os dois domínios. 1) usando SSL original de ssldomain.com para ambos os domínios; 2) usando SSL original para ssldomain.com e SSL autoassinado para domain01.com. Em ambos os casos, o navegador mostra erro de certificado no HTTPS, mas as páginas estão corretas.

Config para esses dois casos

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/ssl/domain01.com/server.cert"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/domain01.com/server.key"
# This is for second case (of course 2 lines above are comments)
# SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
# SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
# SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
# SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

#Redirect permanent / http://www.domain01.com/
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

Com os melhores cumprimentos!

    
por Evgeniy 02.10.2015 / 18:51

2 respostas

2

O Apache usará como padrão o primeiro vhost para esse IP (ou curingas que correspondem a * neste caso) e a porta (443) se não puder localizar um vhost com um ServerName ou ServerAlias correspondente. Então você precisa configurar um site separado para www.domain01.com na porta 443, assim como você fez www.ssldomain.com:443 para que ele não caia no único que você tem como padrão.

Este vhost pode ser configurado para redirecionar de volta para HTTP se você quiser (note que esse redirecionamento é feito após a negociação SSL ainda requer um certificado válido - cada vhost SSL requer que um certificado seja configurado para isso, embora você possa usar o mesmo certificado se for válido para esse vhost também).

Nesse ponto, como você não está recebendo um erro de certificação no link ? Eu diria que você é (e somente se você ignorar, você vê o conteúdo do www.ssldomain.com), ou o seu certificado cobre ambos os domínios (no caso de configurar isso como um vhost separado e redirecionar de volta para http é definitivamente o caminho a percorrer).

Por outro lado, contrariamente à crença popular, você não precisa de um endereço IP separado para configurar vários hosts SSL na instância do Apache - mesmo para navegadores antigos que não suportam SNI. Há outro trabalho por aí. Veja aqui para mais detalhes: Desabilitando o SNI para virtualhost específico no Apache

    
por 02.10.2015 / 21:50
0

Isso funciona para mim, eu apenas altero a ordem dos domínios - o primeiro é ssldomain.com com certificado SSL original e o segundo é domain01.com com o mesmo certificado SSL e redirecionamento.

Include etc/apache22/extra/httpd-ssl.conf

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:80>
DocumentRoot /home/web/web/ssldomain.com
ServerName ssldomain.com
ServerAlias www.ssldomain.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot "/home/web/web/ssldomain.com"
ServerName www.ssldomain.com 
ServerAlias ssldomain.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
</VirtualHost>

<VirtualHost *:443>
DocumentRoot /home/web/web/domain01.com
ServerName domain01.com
ServerAlias www.domain01.com
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/usr/local/etc/apache22/ssl/www.ssldomain.com.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/ssl/private.key"
SSLCertificateChainFile "/usr/local/etc/apache22/ssl/intermediate.crt"

Redirect permanent / http://www.domain01.com/
</VirtualHost>

Agradecimentos especiais a @BazzaDP.

    
por 04.10.2015 / 08:54