我的虛擬主機如下圖所示:
<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://example.com一切都很好,但是由於我不知道原因,如果我轉到指向同一伺服器的任何其他網域,例如https://任何域名.com然後上面的虛擬主機正在回應。顯然瀏覽器說證書與網域不匹配,但忽略它後我可以看到網站https://example.com在下面https://任何域名.com,即使在http://任何域名.com我有完全不同的網站。
我確實知道能夠使用https在http://任何域名.com我需要使用另一個 IP 位址設定另一個憑證 - 這不是我的問題。
我想實現以下選項之一:
- https://任何域名.com應該指向http://任何域名.com
- https://任何域名.com回傳 404 錯誤
我該如何實現這個目標?先感謝您。
答案1
如果您僅為連接埠定義一個虛擬主機,那麼 apache 會將其視為預設虛擬主機,並為連接到它的任何用戶端提供服務。
因此,您需要新增另一個虛擬主機,指示應將其視為預設虛擬主機,並將其設定為 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 層通告它們希望存取的虛擬主機。