檢測 1.2 之前的 TLS 版本是否已在 RHEL 7 上禁用
情況:我有一個 RHEL 7 虛擬機,我已經在上面安裝了 ActiveMQ (v5.16.0)(在 /opt/…)
幾天以來,我的一些客戶無法再使用顯然是 TLS 1.0 協議的 openwire SSL 埠(61617)連接。
錯誤資訊是:
Could not accept connection from tcp://10.10.170.1:45762: Client requested protocol TLSv1 is not enabled or supported in server context (Client requested protocol TLSv1 is not enabled or supported in server context)
當我使用以下命令從伺服器本身測試埠時:
openssl s_client -connect localhost:61617 -tls1 openssl s_client -connect localhost:61617 -tls1_1 openssl s_client -connect localhost:61617 -tls1_2
…前兩個命令未顯示 SSL 證書,但第三個命令正常工作。
我的問題是:
由於我們沒有更改 ActiveMQ 配置中的任何內容,我想知道是否在核心級別的 RHEL 上傳遞了一些安全更新檔?如果是這種情況,我可以在哪裡檢查伺服器?
在 ActiveMQ 方面,我們沒有更改任何關於 SSL 的內容,並且我們的 AMQ 傳輸配置從未定義過 transport.tls:
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
請注意,相同的 ActiveMQ 配置仍在我們的生產伺服器上執行,這讓我覺得在作業系統級別上已經做了一些事情。
我不確定在哪裡發布這個問題:unix.SE、serverFault 或這裡;如果您認為它更多地依賴於另一個站點,請隨時遷移它。我將這個問題集中在 RHEL 上,但它也有助於其他人了解其他作業系統。
似乎最近的 openjdk 更新(在我們的例子中從 1.8.282 到 1.8.292)預設禁用 TLSv1.0 和 TLSv1.1。
更改記錄在以下票證中。
票的摘錄說:
禁用 TLS 1.0 和 1.1
解決方案
在 java.security 配置文件中的 jdk.tls.disabledAlgorithms 安全屬性中添加“TLSv1”和“TLSv1.1”。
您還可以查看RedHat 的發行說明
在第3.1.4 章。禁用 TLS 1.0 和 1.1 版本
TLS 協議的 TLS 1.0 和 1.1 版本不再被認為是安全的,並被更安全的現代 TLS 1.2 和 1.3 版本所取代。現在預設禁用 TLS 1.0 和 1.1 版本。如果遇到問題,您可以通過從 java.security 配置文件中的 jdk.tls.disabledAlgorithms 安全屬性中刪除 TLSv1 或 TLSv1.1 來重新啟用這些版本(風險自負)。
這解釋了為什麼我們的 ActiveMQ 突然停止為仍在使用已棄用協議的客戶端工作。最佳實踐是遷移這些客戶端,而不是重新啟用最弱的協議。
“有趣”的是,在您重新啟動 ActiveMQ 之前,服務 (ActiveMQ) 仍在使用最新的 JDK,因此修補日期可能與客戶端開始出現問題的日期不同。
由於 ActiveMQ 是客戶端連接的服務,ActiveMQ 是明確規定可以為 SSL/TLS 連接啟用哪些協議的服務。更改您的 transport.tls 文件並添加以下內容。
<transportConnector name="openwire+ssl" uri="ssl://0.0.0.0:61617?transport.enabledProtocols=TLSv1,TLSv1.1,TLSv1.2&maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
這也將啟用所有弱化的協議。請記住,TLS 1.0 和 TLS 1.1 不被認為是安全的,不應在不謹慎的情況下使用