2

我想使用 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 连接。

4

1 回答 1

4

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

发送版本 2.0 客户端问候消息的功能将被淘汰,并且会尽快进行。实施者应该尽一切努力尽快向前推进。3.0 版为迁移到新版本提供了更好的机制。

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

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

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

于 2012-10-07T23:48:40.293 回答