如何在Java中设置SSL协议版本?我怎么知道哪一个呢?javax.net.ssl.SSLException:收到致命警报:protocol_version

如何在Java中设置SSL协议版本?我怎么知道哪一个呢?javax.net.ssl.SSLException:收到致命警报:protocol_version,第1张

如何在Java中设置SSL协议版本?我怎么知道哪一个呢?javax.net.ssl.SSLException:收到致命警报:protocol_version

我从调试中看到Java进行TLS1.2握手,而不是更常见的SSLv23握手:

main, WRITE: TLSv1.2 Handshake, length = 225[Raw write]: length = 2300000: 16 03 03 00         ^^^^^ - TLS1.2 (SSL3.3)

服务器本身只能执行TLS1.0,并且无法仅宣布此旧版本。我对Java不熟悉,但是您需要将协议版本设置为TLSv1或SSLv23才能与该服务器通信。

以下代码将仅使用Apache HttpClient设置TLSv1:

HttpClientBuilder  .create()  .setSslcontext(SSLContexts.custom().useProtocol("TLSv1").build())  .build()  .execute(new HttpGet("https://hubic.com"));

编辑以包括评论中的问题:

如果您说服务器“无法仅发布此旧版本”,是否表示服务器配置错误?在这种情况下,为什么Firefox&Chromium没有任何问题?

如果客户端在ClientHello中宣告TLS1.2,而服务器只能执行TLS1.0,则它应宣告,即以TLS1.0答复。如果TLS1.0不够好,则客户端可以关闭连接,或者继续使用TLS1.0。但是,在这种情况下,服务器只是告诉客户端它不喜欢此版本,并关闭了连接。Firefox和其他公司则发布SSLv23声明,在此过程中进行TLS1.0握手,同时还声明其支持的最佳协议版本。这通常适用于从SSL3.0开始的旧服务器,也适用于新服务器。

您可以使用最新的Perl / IO :: Socket :: SSL和此脚本检查服务器的行为。

$ perl analyze-ssl.pl hubic.com-- hubic.com port 443 * maximum SSL version  : TLSv1 (SSLv23) * supported SSL versions with handshake used and preferred cipher(s):   * handshake protocols ciphers   * SSLv23    TLSv1     AES256-SHA   * TLSv1_2   FAILED: SSL connect attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number   * TLSv1_1   FAILED: SSL connect attempt failed error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number   * TLSv1     TLSv1     AES256-SHA   * SSLv3     FAILED: SSL connect attempt failed because of handshake problems error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version

在这里,您可以看到主机支持SSLv23和TLSv1握手,但不支持使用的TLSv1_2握手。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5010960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-15

发表评论

登录后才能评论

评论列表(0条)

保存