So deaktivieren Sie Catch-All auf einem virtuellen SSL-Host

So deaktivieren Sie Catch-All auf einem virtuellen SSL-Host

Mein virtueller Host sieht folgendermaßen aus:

<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>

Wenn ich gehe zuhttps://example.comalles ist gut, aber aus mir unbekanntem Grund, wenn ich zu einer anderen Domain gehe, die auf denselben Server verweist wiehttps://jededomain.comdann antwortet der vhost oben. Offensichtlich sagt der Browser, dass das Zertifikat nicht mit einer Domäne übereinstimmt, aber nachdem ich es ignoriert habe, kann ich die Website von sehenhttps://example.comunterhttps://jededomain.com, selbst unterhttp://jededomain.comIch habe eine völlig andere Website.

Ich weiß, dass ich verwenden kannhttpsAnhttp://jededomain.comIch müsste ein anderes Zertifikat mit einer anderen IP-Adresse einrichten – und das ist nicht mein Problem.

Ich möchte eine der folgenden Optionen erreichen:

  • https://jededomain.comsollte verweisen aufhttp://jededomain.com
  • https://jededomain.comgibt 404-Fehler zurück

Wie erreiche ich das? Vielen Dank im Voraus.

Antwort1

Wenn Sie für Ihren Port nur einen virtuellen Host definieren, wird dieser von Apache als Standard-virtueller Host behandelt und jedem Client bereitgestellt, der eine Verbindung mit ihm herstellt.

Sie müssen daher einen weiteren virtuellen Host hinzufügen, angeben, dass dieser als Standardhost behandelt werden soll, und ihn so einrichten, dass er 404-Clients empfängt. Sie sollten dasselbe Zertifikat wie für example.com verwenden, da es auch für Clients verwendet wird, die aufhttps://example.comwenn sie nicht verwendenSNI.

Das sollte also so aussehen:

<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>

Beachten Sie, dass Sie, wenn Sie sich keine Sorgen um Clients ohne SNI machen (davon gibt es heutzutage eher wenige), durchaus eine beliebige Anzahl von HTTPS-Websites mit unterschiedlichen TLS-Zertifikaten auf derselben IP haben könnten. Die Beschränkung auf virtuelles SSL-Hosting liegt darin begründet, dass Clients ohne SNI der SSL-Schicht nicht mitteilen, auf welchen virtuellen Host sie zugreifen möchten, bevor das Zertifikat angeboten werden muss.

verwandte Informationen