Como desativar o catch-all em um host virtual SSL

Como desativar o catch-all em um host virtual SSL

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.

informação relacionada