Meu host virtual se parece com o seguinte:
<VirtualHost example.com:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl-keys/example/example.crt
SSLCertificateKeyFile /etc/apache2/ssl-keys/example/example.key
SSLCACertificateFile /etc/apache2/ssl-keys/example/COMODO_EV_SSL.ca-bundle.crt
SSLProtocol -ALL -SSLv3 +TLSv1
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
BrowserMatch ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
DocumentRoot /home/example/www/current/web
ServerName example.com
ServerAlias www.example.com
<IfModule php5_module>
php_value newrelic.appname "Example"
</IfModule>
</VirtualHost>
Se eu for parahttps//exemplo.comestá tudo bem, no entanto, por motivo desconhecido para mim, se eu for para qualquer outro domínio que esteja apontando para o mesmo servidor, comohttps//qualquerdominio.comentão o vhost acima está respondendo. Obviamente o navegador diz que o certificado não corresponde a um domínio, mas depois de ignorá-lo posso ver o site dehttps//exemplo.comsobhttps//qualquerdominio.com, mesmo que sobhttp//qualquerdominio.comEu tenho um site totalmente diferente.
Eu sei que para poder usarhttpssobrehttp//qualquerdominio.comEu precisaria configurar outro certificado com outro endereço IP - e isso não é problema meu.
Eu gostaria de alcançar uma das seguintes opções:
- https//qualquerdominio.comdeveria apontar parahttp//qualquerdominio.com
- https//qualquerdominio.comretorna erro 404
Como faço para conseguir isso? Agradeço antecipadamente.
Responder1
Se você definir apenas um vhost para sua porta, ele será tratado pelo Apache como um vhost padrão e servido a qualquer cliente que se conectar a ele.
O que você precisa, portanto, é adicionar outro vhost, indicar que ele deve ser tratado como o padrão e configurá-lo para que atenda a 404 clientes. Você deve usar o mesmo certificado de exemplo.com, pois ele será usado até mesmo para clientes que acessamhttps://example.comse eles não usaremSNI.
Então isso deve ficar assim:
<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/apache2/ssl-keys/example/example.crt
SSLCertificateKeyFile /etc/apache2/ssl-keys/example/example.key
SSLCACertificateFile /etc/apache2/ssl-keys/example/COMODO_EV_SSL.ca-bundle.crt
SSLProtocol -ALL -SSLv3 +TLSv1
SSLCipherSuite ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
Redirect 404 /
</VirtualHost>
Observe que se você não está preocupado com clientes sem SNI (eles tendem a ser poucos hoje em dia), você pode muito bem ter qualquer número de sites https com certificados TLS diferentes no mesmo IP. A limitação à hospedagem SSL virtual se deve ao fato de que os clientes não SNI não anunciam na camada SSL qual vhost desejam acessar antes que o certificado seja oferecido.