当我尝试连接到启用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?
答案 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的支持。我怀疑你的服务器问题可以通过这种方式解决。