Mat*_*ear 3 linux openssl centos5
我们最近被迫将我们的生产云服务器从 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:
Run Code Online (Sandbox Code Playgroud)
和:
#openssl version
OpenSSL 0.9.8e-fips-rhel5 01 Jul 2008
Run Code Online (Sandbox Code Playgroud)
新服务器正在运行:
#openssl version
OpenSSL 1.0.1c 10 May 2012
Run Code Online (Sandbox Code Playgroud)
现在经过大量研究,似乎 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 是您在服务器上配置的任何内容,并在客户端上重复相同的操作,然后调整一个或两个,直到密码套件可用,两者都将协商。