如何使用SSLv2启动ssl连接

我想使用SSLv2启动与远程服务器的SSL连接。 我正在使用Java。 我尝试使用以下方法在套接字中获取支持的协议:

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只使用SSLv2发送hello消息。 我无法理解这意味着什么? 是不是客户端支持SSLv2? 如何使用SSLv2建立SSL连接。

SSLv3和TLSv1.x提供了一种在SSLv2客户端Hello中包装其Client Hello消息的方法,如TLS规范中所述: 向后兼容SSL 。 SSLv3和TLS 1及更高版本具有更一致的机制来协商版本。 正如TLS规范所说:

发送2.0版客户端问候语消息的能力将逐步淘汰。 实施者应该尽一切努力尽快前进。 3.0版提供了更好的机制来迁移到更新的版本。

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

您将在此问题中找到有关Java支持(包括其他实现)的更多详细信息。

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