如何在 ssl 虛擬主機上停用 catch-all

如何在 ssl 虛擬主機上停用 catch-all

我的虛擬主機如下圖所示:

<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我有完全不同的網站。

我確實知道能夠使用httpshttp://任何域名.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 層通告它們希望存取的虛擬主機。

相關內容