簡體   English   中英

Apache Httpd 無法使用 Cipher Suite Honor Order 設置啟用 TLS1.0/1.1 支持

[英]Apache Httpd can't enable TLS1.0/1.1 support with Cipher Suite Honor Order settings

我的 web 服務器無法打開 TLSv1.0/1.1 連接。 由於需要支持較舊的客戶端版本。 無意中發現不管怎么設置,TLSv1.0/1.1連接都打不開,而且這兩個總是同時消失又出現。

我現在用的Apache2版本是
服務器版本:Apache/2.4.55
服務器構建:2023-01-20T06:45:57

我現在用的OpenSSL版本是
OpenSSL 1.1.1n 2022 年 3 月 15 日

當我嘗試刪除所有關於密碼套件的配置時,它可以支持TLS1.0/1.1/1.2/1.3連接,就像這樣: SSLEngine on
SSLCertificateFile "something.cer"
SSLCertificateKeyFile "something.key"

當我添加關於 SSL 協議的設置時,它也可以正常工作。
SSLProtocol All -SSLv3 -SSLv2

至此,我的web服務器可以提供8個TLS1.0/1.1密碼套件,分別是:
TLS_RSA_WITH_AES_128_CBC_SHA
TLS_DHE_RSA_WITH_AES_128_CBC_SHA
TLS_RSA_WITH_AES_256_CBC_SHA
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA
TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA
TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA

此時,它還可以支持三個 TLS1.3 密碼套件和大約四十或五十個 TLS1.2 密碼套件。 當我檢查 Qualys SSL 實驗室時,它說“此服務器不支持參考瀏覽器的前向保密。等級上限為 B”。 雖然支持舊的TLS協議也會降級為B,但我還是嘗試修復之前的問題。

於是我嘗試添加如下配置項,然后問題來了,我的服務器不再支持TLS1.0/1.1了。

SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA
SSLHonorCipherOrder On

我不知道為什么會這樣,起初我以為它是我指定的不支持 TLS1.0 的密碼套件的一部分。 我一一查看,發現此時的TLS1.2密碼套件列表中,有前面八個中的四個。

然后我先嘗試去掉上次的配置,我的服務器又支持TLS1.0/1.1了。 出現的密碼套件正是我之前發現的重復密碼套件。 然后我嘗試再次添加這部分,但是將 SSLHonorCipherOrder 設置為關閉,它仍然像以前一樣工作。 我不明白為什么我的服務器在打開服務器首選項選項時不支持 TLS1.0/1.1。

SSLHonorCipherOrder On設置意味着“確保遵循服務器的密碼首選項而不是客戶端的”。 因此,如果客戶端發送混合密碼集,並且服務器列表在列表的前面包含非 TLS1.0/1.1 集,那么它將優先使用這些(和 TLS1.2)。 這實際上正是您要尋找的:如果客戶端支持更強大的協議,則應該使用它。

您可以使用 openssl 命令行工具快速檢查服務器是否會接受僅支持 TLSv1.0 的連接:

openssl s_client -connect example.com:443 -tls1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM