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

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

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 bem, mas no navegador ativadohttps://www.domain01.com/mostra páginas do site ssldomain.com. Isso é ruim.

Como posso ajustar o Apache para evitar a exibição de páginas de ssldomain.com emhttps://www.domain01.comno navegador.

UPD: Eu estava tentando definir VirtualHosts :80 e :443 para ambos os 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 em HTTPS, mas as páginas estão corretas.

Configuração para estes 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 votos!

Responder1

O Apache usará como padrão o primeiro vhost para esse IP (ou curingas que correspondam como * neste caso) e porta (443) se não conseguir encontrar um vhost com um ServerName ou ServerAlias ​​correspondente. Portanto, você precisa configurar um site separado para www.domain01.com na porta 443, assim como fez www.ssldomain.com:443, para que não volte ao único que você tem como padrão.

Este vhost pode ser configurado para redirecionar de volta para HTTP se você quiser (observe que este redirecionamento é feitodepoisa negociação SSL ainda requer um certificado válido - todo vhost SSL exige que um certificado seja configurado para ele, embora você possa usar o mesmo certificado se for válido para esse vhost também).

Nesse ponto, como é que você não está recebendo um erro de certificação emhttps://www.domain01.com? Eu acho que você é (e somente se você ignorá-lo você vê o conteúdo www.ssldomain.com), ou seu certificado cobre ambos os domínios (nesse caso, configurar isso como um vhost separado e redirecionar de volta para http é definitivamente o caminho para seguir).

Aliás, ao contrário da crença popular, você faznãoprecisa de um endereço IP separado para configurar vários hosts SSL na instância Apache - mesmo para navegadores antigos que não suportam SNI. Há outra solução alternativa. Veja aqui para mais detalhes:Desativando SNI para host virtual específico no Apache

Responder2

Isso funciona para mim, eu apenas mudo 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.

informação relacionada