Apache-2.2

是否可以在 Apache 中為單個 VirtualHost(貴賓犬)設置 SSLProtocol?

  • April 9, 2018

我正在嘗試針對poodle 漏洞測試一個更新檔,該更新檔涉及在我的 Web 伺服器上禁用 SSLv3。為了首先在非生產環境中進行測試,我在 VirtualHost 上為不同的測試伺服器設置 SSLProtocol。我的配置看起來像這樣:

<VirtualHost *:443>
   SSLEngine On
   SSLProtocol All -SSLv2 -SSLv3
   ServerName test.mysite.com
   # bunch of other stuff omitted
</VirtualHost>

然而,即使在重新啟動 apache 之後,我的測試站點仍然聲稱是易受攻擊的。這預計會奏效嗎?我想知道是否必須在全域 ssl 配置中設置它,或者是否有其他微妙的東西導致設置不採用和/或工作。

您只能為配置文件中的第一個 VirtualHost 設置 SSLProtocol。所有後續的 VirtualHost 條目都將從第一個條目繼承該設置,並且由於OpenSSL 錯誤而默默地忽略它們自己的設置。

mod_ssl有相應的錯誤報告,但正如錯誤報告中所述,需要在 OpenSSL 中解決問題(證書是繼承的,但不是協議)。

必須為每個 VirtualHost 單獨設置密碼套件,否則您將得到預設列表,其中包括許多不安全的密碼。此外,請注意,不支持伺服器名稱指示 (SNI) 的舊客戶端將始終使用預設主機(除非使用 阻止SSLStrictSNIVHostCheck),這可能會混淆您的測試。

簡而言之,您應該能夠為每個虛擬主機指定自定義密碼套件和證書,但是在修復錯誤之前,不要期望每個虛擬主機的自定義協議都具有正確的行為。

我在使用 Apache 2.4 和使用 OpenSSL 1.0.1k 的 modssl 時遇到了這個問題,我希望 Apache 2.2 也會遇到同樣的問題。

更新(2016 年 10 月): OpenSSL 錯誤已於 2016 年 10 月 13 日標記為已解決。但是,它是大規模關閉未解決問題的一部分,儘管提供了“部分修復”,但問題從未完全解決。

**更新(2018 年 4 月):**重新送出的 OpenSSL 錯誤現在有一個可用的更新檔(截至 2018 年 4 月 9 日)。此更新檔將更改配置有多個 SNI 虛擬主機的 Apache 實例的行為:

拒絕不符合 vhost SSLProtocol 的連接

這是使用 2.4.27 開發和測試的,並使用該版本進行生產。該更新檔針對 2.4.33 進行了修改並進行了輕微測試。

這會根據為基於 SNI 匹配的虛擬主機配置的 SSLProtocol 檢查連接的版本。因為連接最初是使用為埠的預設主機配置的 SSLProtocol 進行的,所以預設主機必須包含任何虛擬主機將支持的所有協議。

此更新檔將 APR_EMISMATCH 的附加返回狀態添加到 init_vhost 函式,以便使用 OpenSSL 註冊的 ssl_callback_ServerNameIndication 回調可以返回致命警報 SSL_AD_PROTOCOL_VERSION。這旨在對 ClientHello 產生與指定 SSLProtocol 不包含相關版本相同的響應。因為 SNI 回調是在 ClientHello 的處理過程中以及在產生響應之前呼叫的,所以它似乎就是這樣做的。

如果您突然看到以下格式的消息:

Rejecting version [version] for servername [hostname]

然後你應該仔細檢查你SSLProtocol的預設主機。

引用自:https://serverfault.com/questions/637344