ssl—在Java1.7到Java1.8之间通信时握手失败

odopli94  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(399)

我在调用Java1.7到Java1.8的服务时遇到了问题。我会尽力解释我在做什么。
server1java版本是1.7.0̖79(不幸的是,我不能更改它)。我正在使用spring rest模板进行通信。我知道1.7使用tls1,Java8使用tls1.2。我在1.8版本上尝试了与双方的通信,我能够通信,所以我确信证书是好的。
我使用这个命令来检查服务器2使用的密码 $ openssl s_client -connect <server>:8443 -tls1_2 得到了回应

..... Long certificate chain

SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES128-GCM-SHA256
    Session-ID: AC92BFBC090F4245271C10B9C5B968D1845278AE03714ED5806B4929DC3D0CC9

所以我认为服务器使用的是这些协议和密码。因此,如果我使用相同的协议和密码,我应该能够通信。为了再次确保这个特定的密码存在,我让我的同事在服务器2上运行以下命令

openssl ciphers -v

得到了以下回应

... lot of ciphers
ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD

所以我确信服务器支持ecdhe-rsa-aes128-gcm-sha256,并且我在我的rest模板的sslconnectionsocketfactory上做了修改

public SSLConnectionSocketFactory sslConnectionSocketFactory() throws Exception {

        return new SSLConnectionSocketFactory(sslContext(),
                new String[] {
                        "TLSv1.2"
                },
                new String[] {
                        "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"
                },
                NoopHostnameVerifier.INSTANCE);
    }

但我还是有错误

"Unsupported ciphersuite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"

你能把我引向正确的方向吗?我找了很多,但找不到解决办法。提前谢谢。

dnph8jn4

dnph8jn41#

正如@dave\u thompson\u085所提到的,问题在于密码套件。我应该早点发现:)第二台服务器只有2个TLS1.2密码套件(不知道为什么或如何),而且都是gcm,不支持我的服务器。谢谢大家的帮助。

相关问题