0

我已经使用-Djavax.net.debug=all选项在我的应用程序中启用了日志。编写的代码应该使用 SSLv3 协议,但是在我检查时在日志中显示为::

*** ClientHello, TLSv1

*** ServerHello, TLSv1

据我了解,客户端和服务器使用 TLSv1 进行握手,但由于我在启动套接字时在代码中使用了 SSLv3,理想情况下它应该打印 SSLv3 而不是 TLSv1。

下面是我使用的代码片段:

SSLContextBuilder builder = new SSLContextBuilder();
builder.useProtocol("SSLv3");

SSLContext sslContext = builder.build();

有人可以澄清同样的原因,还是我错过了其他东西。只是补充一下,我在 Java 7 上。

4

1 回答 1

1

很可能SSLv3只是服务器不支持(由于安全性,现在推荐配置),所以 lib 使用最少支持的TLS版本。

UPD:似乎 hello 格式没有说明实际上将使用什么协议。Java 文档中有一些内容:

目前,SSLv3、TLSv1 和 TLSv1.1 协议允许您发送封装在 SSLv2 格式 hello 中的 SSLv3、TLSv1 和 TLSv1.1 hello。有关在这些协议中允许这种兼容性的原因的更多详细信息,请参阅相应 RFC(之前列出)中的附录 E。

请注意,某些 SSL/TLS 服务器不支持 v2 hello 格式,并要求客户端 hello 符合 SSLv3 或 TLSv1 客户端 hello 格式。

SSLv2Hello 选项控制 SSLv2 封装。如果客户端禁用 SSLv2Hello,则所有传出消息都将符合 SSLv3/TLSv1 客户端问候格式。如果在服务器上禁用 SSLv2Hello,则所有传入消息必须符合 SSLv3/TLSv1 客户端问候格式。

于 2018-05-11T08:27:28.473 回答