
我有一個非常具體用例。我想使用 Apache 檢查使用者的瀏覽器是否能夠使用現代 CipherSuites。
Apache 使用 https 進行調用,並且應該嘗試建立 SSL 連接,如果失敗,Apache 應該將用戶重定向到後備 HTTP 站點,在那裡他被告知他的瀏覽器已過時。
當然,我需要使用 mod_rewrite,它甚至有一個包含開/關的 https 變量,這取決於 SSL 是否建立。但是,如果初始 SSL 握手失敗,我該如何告訴 apache 繼續呢?
答案1
客戶端應該嘗試建立 SSL 連接,如果失敗,Apache 應該將用戶重定向到後備 HTTP 站點,在那裡他被告知他的瀏覽器已過時。
我認為不能,TLS 握手會在客戶端和 Web 伺服器可以交換 HTTP 協定訊息的階段之前的階段失敗。
反而:
- 接受所有密碼。
- 並將它們從強到弱排序
SSLCipherSuite ...
指示。 - 不要讓客戶端確定密碼的偏好,而是按照您在步驟 2 中確定的偏好順序與客戶端進行協商
SSLHonorCipherOrder on
指示。 - 那應該導致與客戶端支援的最強密碼的連線。 (理論上,您的實際里程可能會有所不同。)
- 如果該密碼低於您的閾值,則會套用邏輯來顯示您的安全訊息。
- 確保真正需要強密碼的內容手冊中解釋了
即:
# be liberal in general
SSLCipherSuite ALL:!aNULL:RC4+RSA:+HIGH:+MEDIUM:+LOW:+EXP:+eNULL
SSLHonorCipherOrder on
<Location "/strong/area">
# but https://hostname/strong/area/ and below
# requires strong ciphers
SSLCipherSuite HIGH:!aNULL:!MD5
</Location>