“SSL23_GET_SERVER_HELLO:未知协议”服务器升级后

时间:2015-10-15 04:13:06

标签: java tomcat ssl

最近我们构建了新的Windows 2012服务器,其中包含tomcat 7.0.57和java版本“1.8.0_45”。

从客户端openssl连接时,我收到以下错误。但是从IE完美运作。

新服务器:

OpenSSL> s_client -connect xxx.xxx.xxx.xxx:443
Loading 'screen' into random state - done
CONNECTED(00000130)
5724:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:.\ssl\s
23_clnt.c:601:
OpenSSL>

旧服务器:(正常连接)

OpenSSL> s_client -connect yyy.yyy.yyy.yyy:443
Loading 'screen' into random state - done
CONNECTED(00000114)
depth=1 /C=XX/O=YYYY CA1
verify error:num=19:self signed certificate in certificate chain
verify return:0
---
Certificate chain
.........
SSL handshake has read 3064 bytes and written 282 bytes
---
New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA
Server public key is 2048 bit
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
Cipher    : EDH-RSA-DES-CBC3-SHA
.......

任何人都能说出为什么会这样吗?

新服务器: Windows 2012 R2 / java版“1.8.0_45”/ Tomcat 7.0.57

旧服务器: Windows 2003 / java版“1.6.0_31”/ Tomcat 6.0

客户端: Windows 7 / Java 1.7.0_75

1 个答案:

答案 0 :(得分:1)

默认情况下,Java 1.8和Tomcat 7.0.57 and later都禁用SSLv3,默认情况下禁用Java 1.8 SSLv2Hello,默认情况下,OpenSSL使用SSLv2HelloSSLv3,因此协议不匹配,双方无法正确完成SSL / TLS握手。

如果您想从OpenSSL s_client进行连接,请使用-tls1开关(或-tls1_1等),您应该能够连接。

如果您想在Tomcat中重新启用SSLv3,请阅读Configuration section of the Tomcat Users' Guide,特别是sslEnabledProtocolssslProtocol属性。

编辑2015-10-19 16:40 America / New_York

以上内容适用于基于Java的连接器,它使用JVM的内置JSSE进行加密。如果使用本机APR-base连接器,将使用OpenSSL。 OpenSSL的默认行为取决于您安装的版本...随着更新版本的发布,默认协议已经修改。

只要底层库(JSSE或OpenSSL)支持该协议,您就可以始终使用Tomcat的配置来启用任何协议。

如果您选择一个支持的协议(例如TLSv1 - > TLSv1握手,TLSv1.1 - > TLSv1.1握手等),OpenSSL将使用确切的协议特定握手。如果您启用了多个协议(例如SSLv2hello),请使用SSLProtocol="TLSv1+TLSv1.1"。这记录在Tomcat's HTTP connectorSSLProtocol属性下。

如果您不确定,请使用已启用的协议(无论连接器类型如何),并始终使用信誉良好的测试套件进行测试,以确定哪些协议得到了正确支持。