Apache-2.2

如何在 Apache 中禁用 TLS 1.1 和 1.2?

  • February 1, 2018

我有一個執行 Apache 2.2.22 的 Ubuntu 12.04.2 LTS 伺服器,帶有 mod_ssl 和 OpenSSL v1.0.1。

在我的 vhosts 配置中(所有其他的行為都如我所料),我SSLProtocol-all +SSLv3.

使用該配置,TLS 1.1 和 1.2 已啟用並正常工作 - 這對我來說是違反直覺的,因為我預計在該配置下只會啟用 SSLv3。

我可以使用 啟用/禁用 TLSv1 -/+TSLv1,它按預期工作。但是+/-TLSv1.1並且+/-TLSv1.2不是有效的配置選項——所以我不能那樣禁用它們。

至於我為什麼要這樣做——我正在處理一個第三方應用程序(我無法控制它),它在啟用 TLS 的伺服器上有一些錯誤行為,我需要完全禁用它才能繼續前進。

對這個錯誤很感興趣(是的,我已經能夠重現它)我查看了最新穩定版本的原始碼mod_ssl並找到了解釋。忍受我,這會變得業餘堆棧溢出:

解析後SSLProtocol,結果char如下所示:

0 1 0 0
^ ^ ^ ^
| | | SSLv1
| | SSLv2
| SSLv3
TLSv1

在啟動新的伺服器上下文時,將啟用所有可用的協議,並char使用一些漂亮的按位 AND 操作檢查以上內容,以確定應該禁用哪些協議。在這種情況下,SSLv3 是唯一明確啟用的協議,其他 3 個協議將被禁用。

OpenSSL 支持 TLSv1.1 的協議設置,但由於SSLProtocol不考慮此選項,因此它永遠不會被禁用。OpenSSL v1.0.1 與 TLSv1.2 有一些已知問題,但如果它受支持,我想這與 TLSv1.1 相同;它不被 mod_ssl 辨識/處理,因此永遠不會被禁用。

mod_ssl 的原始碼參考:

SSLProtocol在第 925 行解析pkg.sslmod/ssl_engine_config.c

上述函式中使用的選項在第 444 行定義pkg.sslmod/mod_ssl.h

所有協議在第 586 行啟用,pkg.sslmod/ssl_engine_init.c然後在後續行中禁用特定協議

那怎麼禁用呢?

你有幾個選擇:

  1. 在 OpenSSL 配置文件中禁用它:

Protocols All,-TLSv1.1,-TLSv1.2 2. 重寫mod_ssl;-)

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