在 JDK 1.7 中连接到 https 站点时出现问题

Issues while connecting to https site in JDK 1.7

我有两个问题,

1) 我在尝试连接到 JDK 1.7

中的服务器时遇到以下异常

javax.net.ssl.SSLProtocolException: Protocol violation: server sent a server key exchangemessage for key exchange RSA

服务器支持以下协议 - TLS_RSA_WITH_AES_256_CBC_SHA 和 TLS_RSA_WITH_AES_128_CBC_SHA

2)刚看到下面的link,

Is TLS_RSA_WITH_3DES_EDE_CBC_SHA equivalent to SSL_RSA_WITH_3DES_EDE_CBC_SHA

这说明 TLS_RSA_WITH_3DES_EDE_CBC_SHA 和 SSL_RSA_WITH_3DES_EDE_CBC_SHA 是等价的。

但我发现当服务器支持 "TLS_RSA_WITH_3DES_EDE_CBC_SHA" 并连接到它时 (JDK1.7),此密码套件未被选中,我与该站点的连接失败。

另外请注意,我正在使用 Apache 的 httpclient 进行连接。

这是一个很好的 link,显示了 Java 1.7 支持的内容: https://www.ssllabs.com/ssltest/viewClient.html?name=Java&version=7u25

Java 1.7 接受了您的其中一个协议 (TLS_RSA_WITH_AES_128_CBC_SHA),但仅适用于 TLSv1.0 或更低版本。可能值得检查服务器是否已关闭支持,如果这只支持 TLSv1.1 或 TLSv1.2?您可以使用同一站点中的 server test 来检查这一点。

如果是,那么您需要升级到 Java 8。如果您的 Java 应用程序使用 SSL/TLS,这可能是您应该考虑的事情,因为 PCI 已强制转向关闭 TLSv1.0,所以这将成为一个越来越大的问题。