OpenSSL 握手失敗
我們最近被迫將我們的生產雲伺服器從 GoDaddy 遷移到 Azure,因為 GoDaddy 將終止他們的雲伺服器服務。
我們的伺服器之一是執行 JasperReports Bitnami 堆棧的 CentOS 5.7。在遷移過程中,我將所有伺服器升級到最新發行版,並在 Ubuntu 12.04LTS 上從 Azure Bitnami Jasper 映像重建 Jasper
A 在 JasperServer 上安裝 SSL 證書並正常工作
所有新伺服器都執行良好,現在問題出在此處。
我們在 GoDaddy 上還有一個專用的 CentOS 5.8 虛擬伺服器(目前),該伺服器上有一系列站點,通過 Soap 提供來自 Jasper 的報告。
但是,嘗試連接時握手失敗
#openssl s_client -connect newjasperserver.com:443 CONNECTED(00000003) 9092:error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure:s23_clnt.c:583:
和:
#openssl version OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
新伺服器正在執行:
#openssl version OpenSSL 1.0.1c 10 May 2012
現在經過大量研究,OpenSSL < 0.9.8k 和 OpenSSL 1.0.1 之間似乎存在不兼容問題。
我確定的選項是:
- 將伺服器遷移到 Azure 上的 CentOS 6.4 伺服器(理想,但政治上困難,不要問為什麼)
- 就地升級伺服器(不支持,我不想在生產伺服器上嘗試)
- 擦除伺服器並使用 6.4 重建它(可能,但如果我這樣做,我將強制選項 1)
- 從伺服器中刪除 OpenSSL 並安裝更新的版本(再一次,我在生產伺服器上不習慣的東西)
- 安裝第二個 OpenSSL 實例(我的 #2 選項,但我不確定如何繼續)
- 安裝 OpenSSL 的替代品(甚至還沒有開始研究這個)
- 在 Jasper 伺服器上禁用強制加密並允許通過 http 連接(這看起來是我最好的臨時修復,直到我可以強制將該伺服器遷移到 Azure)
有什麼我錯過的選擇嗎?Jasper 方面有沒有辦法允許來自較舊的 OpenSSL 的連接?
你遇到的不兼容是這樣的:
RHEL5(及其衍生版本)上的 OpenSSL 版本根本不宣傳對 TLS 的支持。它僅適用於 SSLv3 和 SSLv2。
RHEL6(及其衍生版本)上的 OpenSSL 版本一直支持 TLS,一直到 TLSv1.2。它也使用 SSLv3,但它想要協商 TLS。
他們仍然應該能夠協商會話,因為它們都有一個(小)通用密碼列表,但取決於您為伺服器上的密碼設置選擇的內容(例如,為了減輕 BEAST,消除低安全性密碼等)可能沒有客戶端和伺服器可以用來通信的任何通用密碼。
伺服器的密碼套件將設置在
<Connector ciphers=
您的 Tomcatserver.xml
或 Apache 中,SSLCipherSuite
如果您將它放在 Apache 後面。客戶端將使用它配置為使用的任何內容,或者DEFAULT
以其他方式使用。解決方法是檢查伺服器上的密碼套件,例如,
openssl ciphers -v STRING
其中 STRING 是您在伺服器上配置的任何內容,並在客戶端上重複相同的操作,然後調整一個或兩個,直到有一個密碼套件可用,雙方都可以協商。