Apache-2.2

是否可以使用後端應用程序可以使用的 Apache 設置 SSL/TLS 版本 HTTP 標頭?

  • November 14, 2014

在具有專用 IP 的虛擬機上有一項服務需要通過 SSLv3(帶有 IE6 客戶端的 WinXP)進行訪問。幾年前,我將該服務移至該虛擬機,以便能夠為所有其他服務禁用 SSLv3。

我想通知該服務的 SSLv3 客戶端,該服務將在“某個時間”需要 TLS 1.1 或更高版本。該通知不得顯示在任何其他客戶上(業務決策)。

為了實現這一點,我正在考慮將代理 (Apache) 上使用的 SSL/TLS 版本資訊注入到原始 HTTP 請求中,以讓後端應用程序有條件地放置“升級你的系統,恐龍!” 通知基於實際使用的傳輸層安全方法。

如何配置注入?我僅在使用調試標誌編譯 Apache 時才找到所需的環境變數,但這在生產中是不可能的。

最終結果應該是 Apache Proxy 正在註入 HTTP 請求標頭“X-TLS-Version: SSL3”(或“X-TLS-Version: TLS12”或熟悉的語法)。

Apache 的 mod_ssl在啟用該指令時提供了許多環境變數,其中包括 SSL 協議:SSLOptions+StdEnvVars

SSL_PROTOCOL string SSL 協議版本(SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2)

然後,您可以在使用SSLv3 時將其用作設置標頭的條件:

SSLOptions +StdEnvVars    
SetEnvIf SSL_PROTOCOL "SSLv3" insecure-protocol=true
RequestHeader set X-TLS-Version "SSLv3" env=insecure-protocol 

要始終使用 SSL 協議設置標頭,以下可能有效:

RequestHeader set X-TLS-Version %{SSL_PROTOCOL}s  

這有一個小優勢,對於簡單的場景,您不需要產生成本,但可以直接使用語法SSLOptions +StdEnvVars訪問某些 SSL 變數。%{FOOBAR}s

兩者都沒有經過測試。

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