Centos5

OpenSSL 握手失敗

  • December 27, 2013

我們最近被迫將我們的生產雲伺服器從 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 之間似乎存在不兼容問題。

我確定的選項是:

  1. 將伺服器遷移到 Azure 上的 CentOS 6.4 伺服器(理想,但政治上困難,不要問為什麼)
  2. 就地升級伺服器(不支持,我不想在生產伺服器上嘗試)
  3. 擦除伺服器並使用 6.4 重建它(可能,但如果我這樣做,我將強制選項 1)
  4. 從伺服器中刪除 OpenSSL 並安裝更新的版本(再一次,我在生產伺服器上不習慣的東西)
  5. 安裝第二個 OpenSSL 實例(我的 #2 選項,但我不確定如何繼續)
  6. 安裝 OpenSSL 的替代品(甚至還沒有開始研究這個)
  7. 在 Jasper 伺服器上禁用強制加密並允許通過 http 連接(這看起來是我最好的臨時修復,直到我可以強制將該伺服器遷移到 Azure)

有什麼我錯過的選擇嗎?Jasper 方面有沒有辦法允許來自較舊的 OpenSSL 的連接?

你遇到的不兼容是這樣的:

RHEL5(及其衍生版本)上的 OpenSSL 版本根本不宣傳對 TLS 的支持。它僅適用於 SSLv3 和 SSLv2。

RHEL6(及其衍生版本)上的 OpenSSL 版本一直支持 TLS,一直到 TLSv1.2。它也使用 SSLv3,但它想要協商 TLS。

他們仍然應該能夠協商會話,因為它們都有一個(小)通用密碼列表,但取決於您為伺服器上的密碼設置選擇的內容(例如,為了減輕 BEAST,消除低安全性密碼等)可能沒有客戶端和伺服器可以用來通信的任何通用密碼。

伺服器的密碼套件將設置在&lt;Connector ciphers=您的 Tomcatserver.xml或 Apache 中,SSLCipherSuite如果您將它放在 Apache 後面。客戶端將使用它配置為使用的任何內容,或者DEFAULT以其他方式使用。

解決方法是檢查伺服器上的密碼套件,例如,openssl ciphers -v STRING其中 STRING 是您在伺服器上配置的任何內容,並在客戶端上重複相同的操作,然後調整一個或兩個,直到有一個密碼套件可用,雙方都可以協商。

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