【问题标题】:How to initiate ssl connection using SSLv2如何使用 SSLv2 启动 ssl 连接
【发布时间】:2012-09-28 05:30:37
【问题描述】:

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

【问题讨论】:

    标签: java ssl network-programming jsse


    【解决方案1】:

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

    发送版本 2.0 客户端问候消息的能力将是 迅速淘汰。实施者应该使每个 努力尽快向前推进。 3.0 版 为迁移到新版本提供了更好的机制。

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

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

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

    【讨论】:

    • 我知道它不安全,不应该使用。我需要将其用于测试目的。如果可能的话,我仍然需要任何方法来做到这一点。
    • 不太确定你想测试什么。 SSLv2 真的不应该再存在了。话虽如此,请查看 EJP 对我所链接的问题的回答。显然,IBM JRE 支持它。或者,如果您确实需要与 SSLv2 服务器通信,您可以使用通过 OpenSSL 实现(并使用 v2 配置)的隧道,可能使用 stunnel 之类的东西,而不是使用 JSSE。
    • @Bruno 此答案中的第二个“SSLv3”应该是“SSLv2”(客户端打招呼)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 2017-08-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多