2012-10-07 59 views
2

我想使用SSLv2启动与远程服务器的SSL连接。我正在使用Java。我试着用得到我的插座支持的协议:如何使用SSLv2启动SSL连接

String[] suppProtocols=socket.getSupportedProtocols(); 
System.out.println("The protocols supported for this socket are: 
"+Arrays.toString(suppProtocols)); 

我在输出得到这个:

[SSLv2Hello, SSLv3, TLSv1, TLSv1.1, TLSv1.2] 

现在,我读了Java不支持的SSLv2和SSLv2Hello只发送hello消息使用SSLv2。我无法理解这是什么意思?与客户端是否支持SSLv2不一样?我如何使用SSLv2进行SSL连接。

回答

4

SSLv3和TLSv1.x提供了一种将客户端Hello消息包装在SSLv2客户端中的方法,您好,如TLS specification: Backward compatibility with SSL中所述。 SSLv3和TLS 1及以上版本具有更一致的协商机制来协商版本。由于TLS规范说:

的能力送2.0版客户端的Hello报文将 一切应有的急速淘汰。执行者应该尽可能快地向前推进。版本3.0 为更新版本提供了更好的机制。

Sun/Oracle JRE或OpenJDK不支持SSLv2。将SSLv3 +消息封装到SSLv2消息中仅用于向后兼容。现在是disabled by default for clients in Java 7。从服务器的角度来看,它至少可以接受其他SSLv3 +客户端,它们以这种方式将客户端Hello消息封装在SSLv2消息中,无论他们是否支持SSLv2。

您可以在this question中找到有关Java支持(包括其他实现)的更多详细信息。

一般来说,SSLv2被认为是不安全的:你根本不应该使用它。总体趋势是从SSLv3转向TLS 1.0或更高版本,而不是倒退。

+0

我知道这是不安全的,不应该使用。我需要将其用于测试目的。如果可能的话,我仍然需要任何方法来做到这一点 –

+1

不太确定你想要测试什么。 SSLv2确实不应该存在。这就是说,检查EJP对我所链接问题的回答。显然,IBM JRE支持它。或者,如果您确实需要与SSLv2服务器交谈,则可以使用通过OpenSSL实现的隧道(并使用v2配置),或许使用类似“stunnel”的隧道,而不是使用JSSE。 – Bruno

+0

@Bruno这个答案中的第二个'SSLv3'应该是'SSLv2'(客户端你好)。 – EJP

相关问题