TLSv1 在 Apache 中未關閉
在 CentOS 7 伺服器上查看我的 SSLProtocols 可能被覆蓋的最佳方法是什麼?Apache 2.4.6(意識到這也很老了,所以我必須在下班時間更新它,看看它是否能解決問題)。
我正在嘗試在我的配置根目錄(/etc/httpd/conf/httpd.conf)中使用此 Apache 指令禁用 TLSv1
SSLProtocol -all +TLSv1.1 +TLSv1.2
然而,當我執行
nmap --script ssl-enum-ciphers -p 443 <mysite.com>
它時,它顯示 TLSv1 仍然處於啟用狀態:ssl-enum-ciphers: | TLSv1.0: | ciphers: | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (secp256r1) - A | TLS_DHE_RSA_WITH_AES_256_CBC_SHA (dh 2048) - A | compressors: | NULL | cipher preference: server
SSL Labs 測試揭示了同樣的事情。
SSLProtocol
虛擬主機中沒有提供其他指令。之後我決定使用這個命令搜尋所有配置文件
sudo grep -rnw '/etc/httpd' -e 'SSLProtocol'
,它顯示了以下位置:/etc/httpd/conf/httpd.conf:359:SSLProtocol -all +TLSv1.1 +TLSv1.2 /etc/httpd/conf.d/ssl.conf:74:SSLProtocol ALL -SSLv2 -SSLv3 /etc/httpd/conf.d/ssl.conf:227:SSLProtocol ALL -SSLv2 -SSLv3 /etc/httpd/conf.d/ssl.conf:257:SSLProtocol ALL -SSLv2 -SSLv3 /etc/httpd/conf.d/ssl.conf.rpmnew:75:SSLProtocol all -SSLv2 -SSLv3
所以我進入 ssl.conf 文件並更改第 74 行以匹配,問題仍然存在。第 227 和 257 行是兩個虛擬主機,我目前沒有測試,但稍後會更新。
編輯:儘管剩下的兩行是針對虛擬主機的,獲得了有關 OpenSSL 錯誤的答案,但我更改了對伺服器的所有引用
SSLProtocol -all +TLSv1.1 +TLSv1.2
並重新啟動了我的伺服器,但沒有任何改變。為什麼會這樣?我想知道這是否是 Apache 2.4.6 本身的錯誤。
我設法解決了這個問題,這絕對是一個意想不到的修復。在我看來,虛擬主機繼承其兄弟設置的事實是一個糟糕的決定。特別是全域文件設置不優先。我在 Bugzilla 上發現了這個問題,後來有人提到 Let’s Encrypt
/etc/letsencrypt/options-ssl-apache.conf
在這個文件中有一個隔離文件時正在處理這個問題,並且有一個設置:SSLProtocol all -SSLv2 -SSLv3
Certbot 會在虛擬主機配置中自動安裝對此文件的引用,並且該證書恰好安裝在我的伺服器配置中的第一個虛擬主機上。我更改了它以匹配我之前的設置,
SSLProtocol -all +TLSv1.1 +TLSv1.2
並且效果很好。