
Мой виртуальный хост выглядит следующим образом:
<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 они хотят получить доступ, до того, как сертификат будет предложен.