我的虚拟主机如下所示:
<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
如果您为端口仅定义一个 vhost,则 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 的客户端(如今这类客户端很少),那么您可以在同一个 IP 上拥有任意数量的具有不同 TLS 证书的 https 网站。虚拟 SSL 托管的限制是由于非 SNI 客户端在提供证书之前不会向 SSL 层通告他们希望访问哪个虚拟主机。