最近我们构建了新的Windows 2012服务器,其中包含tomcat 7.0.57和java版本“1.8.0_45”。“SSL23_GET_SERVER_HELLO:未知协议”服务器升级后
从客户端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
默认假设JSSE(不是 “本地”= APR)的Java 8或7 JSSE *客户端上禁用SSLv2Hello *但不*服务器*;根据你的链接,Tomcat显然会禁用它。 OpenSSL *命令行*'s_client'默认为v2格式通过0.9.8,v3从1.0.0开始; OP的错误信息中的源信息表明他正在从2009年起运行0.9.8 patch j到l。 0.9.8和1.0.0没有实现TLS1.1或1.2,因此没有'-tls1_1'标记,也没有' - - tls1_2'也不是'-no_'版本。 ... –
...默认情况下所有版本*甚至在v2格式(1.0.1和更高版本1.2)中都提供*至少1.0,但具有SSLv2Hello off的JSSE 8拒绝任何v2优惠, 使用警报40与版本1.2因此v3格式)0.9.8客户认为无效。有趣的是,JSSE ** 7 **警告1.0版本,OpenSSL可以理解,但即使如此,40 = handshake_failure也不是非常有用。 (OpenSSL * library *根本不默认,取决于应用程序。)那些说,我同意的结论。 –
openssl命令使用-tls(s_client -connect xxx.xxx.xxx.xxx:443 -tls)。但是当我试图通过设置sslProtocol =“SSLv3”在tomcat服务器本身中启用SSlv3时,openssl命令不工作(不带-tls)。根据我的理解。如果我们在服务器中启用SSLv3,openssl应该在没有-tls的情况下工作。 –