SSL身份验证问题

时间:2015-08-13 19:18:36

标签: java linux ssl tomcat7

当我尝试连接到启用SSL的Web服务时,出现ssl错误。当我尝试使用openSSL测试连接时,我得到了返回:

openssl s_client -debug -connect w.x.y.z:8443 CONNECTED(00000003) write to 0x1e7ae00 [0x1e7b840] (121 bytes => 121 (0x79)) 0000 - 80 77 01 03 01 00 4e 00-00 00 20 00 00 39 00 00 .w....N... ..9.. 0010 - 38 00 00 35 00 00 16 00-00 13 00 00 0a 07 00 c0 8..5............ 0020 - 00 00 33 00 00 32 00 00-2f 03 00 80 00 00 05 00 ..3..2../....... 0030 - 00 04 01 00 80 00 00 15-00 00 12 00 00 09 06 00 ................ 0040 - 40 00 00 14 00 00 11 00-00 08 00 00 06 04 00 80 @............... 0050 - 00 00 03 02 00 80 00 00-ff de aa 66 42 43 9f cf ...........fBC.. 0060 - e0 43 1b ec 72 9a 8b 24-9d 43 55 b0 d2 2f cf 1a .C..r..$.CU../.. 0070 - 22 01 aa be ec 11 4a a4-8c ".....J.. read from 0x1e7ae00 [0x1e80da0] (7 bytes => 0 (0x0)) 17823:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:

看起来它试图与SSLv2或SSLv3连接,但它不能。可以使用SSLv1建立连接。我有一个在tomcat实例中运行的Web服务,可能没有启用SSLv2或SSLv3。如何在tomcat上启用SSLv2或SSLv3?

1 个答案:

答案 0 :(得分:4)

  80 77 01 03 01...
     

...看起来它试图与SSLv2或SSLv3连接,但它不能。

调试输出中的03 01表明它正在使用TLS 1.0。前面的字节是长度(2字节)和类型(ClientHello = 01),因此表示SSL 2.0 compatible handshake

  

可以使用SSLv1建立连接。

没有SSLv1。您可能意味着TLS 1.0或更高版本(即TLS 1.1或TLS 1.2)

17823:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:s23_lib.c:188:

这表示服务器只是关闭连接。这可能有很多原因,例如错误的协议或没有通用密码。在使用openssl进行的测试中,它可能也是一个缺少的SNI扩展名,因为某些服务器会关闭连接,或者如果它们没有获得此扩展,则会抛出一些错误。使用-servername选项指定预期的主机名。

除此之外,服务器只是关闭连接并且不发送任何错误信息。因此,您需要查看服务器端以获取更详细的错误信息(日志文件等)。

  

如何在tomcat上启用SSLv2或SSLv3?

你最好不要。 SSL 2.0(SSLv2)绝对不安全,SSL 3.0(SSLv3)也被认为是不安全的(POODLE攻击)。您不应将任何这些用于生产系统。大多数客户端根本不支持SSL 2.0,并且默认情况下越来越多地禁用对SSL 3.0的支持。我怀疑你的服务器问题可以通过这种方式解决。