OpenSSL握手失败

我们最近被迫将我们的生产云服务器从GoDaddy迁移到Azure,因为GoDaddy正在结束他们的云服务器服务。

我们的一台服务器是运行JasperReports Bitnami堆栈的CentOS 5.7。 在迁移过程中,我将所有服务器升级到最新的发行版,并在Ubuntu 12.04LTS上从Azure Bitnami Jasper映像重buildJasper

A在JasperServer上安装了SSL证书并正常工作

所有的新服务器都performance的很好,现在问题来了。

我们在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. 擦拭服务器并重build6.4(可能性,但如果我这样做,我会强制选项1)

  4. 从服务器中删除OpenSSL并安装一个更新的版本(再一次,我不喜欢在生产服务器上)

  5. 安装第二个OpenSSL实例(我的#2选项,但我不确定如何继续)

  6. 安装一个替代OpenSSL(还没有开始看这个)

  7. 在Jasper服务器上禁用强制encryption,并允许通过http连接(这看起来像我最好的临时修复,直到我可以强制该服务器迁移到Azure)

有没有我错过的select? 在Jasper方面有没有办法允许从旧的OpenSSL的连接?

你遇到的不兼容性是这样的:

RHEL5(及其衍生产品)上的OpenSSL版本根本不支持TLS。 它只做SSLv3和SSLv2。

RHEL6(及其派生产品)上的OpenSSL版本支持TLS一直到TLSv1.2。 它也是SSLv3,但它想要谈判TLS。

他们应该仍然能够谈判一个会话,因为有一个(小)的通用密码列表,但取决于你select的密码设置在服务器上(例如,为了减轻BEAST,消除低安全密码等等),客户端和服务器可以使用通用的密码。

服务器的密码套件将被设置在<Connector ciphers=您的Tomcat server.xml或Apache的SSLCipherSuite如果它位于Apache之后)。 客户端将使用它configuration使用的任何东西,否则使用DEFAULT

解决方法是检查服务器上的密码套件,例如使用openssl ciphers -v STRING ,其中STRING是您在服务器上configuration的任何内容,然后在客户端上重复相同的操作,然后调整一个或两个,直到密码套件可用两者都会谈判。