我从调试中看到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握手。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)