Как отключить всеобъемлющую фильтрацию на виртуальном хосте SSL

Как отключить всеобъемлющую фильтрацию на виртуальном хосте SSL

Мой виртуальный хост выглядит следующим образом:

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

Если я пойду вhttps://пример.comвсе хорошо, однако по неизвестной мне причине, если я перехожу на любой другой домен, который указывает на тот же сервер, напримерhttps://anydomain.comто vhost выше отвечает. Очевидно, браузер говорит, что сертификат не соответствует домену, но после его игнорирования я могу увидеть веб-сайт изhttps://пример.comподhttps://anydomain.com, даже то, что подhttp://anydomain.comУ меня совершенно другой сайт.

Я знаю, что для того, чтобы иметь возможность использоватьhttpsнаhttp://anydomain.comМне нужно будет настроить еще один сертификат с другим IP-адресом — и это не моя проблема.

Я хотел бы реализовать один из следующих вариантов:

  • https://anydomain.comдолжен указывать наhttp://anydomain.com
  • https://anydomain.comвозвращает ошибку 404

Как мне этого добиться? Спасибо заранее.

решение1

Если вы определите только один виртуальный хост для своего порта, Apache будет рассматривать его как виртуальный хост по умолчанию и предоставлять его любому клиенту, который к нему подключится.

Поэтому вам нужно добавить еще один vhost, указать, что он должен рассматриваться как хост по умолчанию, и настроить его так, чтобы он выдавал 404 клиентам. Вам следует использовать тот же сертификат, что и для example.com, поскольку он будет использоваться даже для клиентов, получающих доступhttps://example.comесли они не используютСНИ.

Итак, это должно выглядеть так:

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

Обратите внимание, что если вас не беспокоят клиенты без SNI (сейчас их, как правило, мало), вы вполне можете иметь любое количество https-сайтов с разными сертификатами TLS на одном и том же IP. Ограничение виртуального ssl-хостинга связано с тем, что клиенты без SNI не сообщают слою SSL, к какому vhost они хотят получить доступ, до того, как сертификат будет предложен.

Связанный контент