我在调用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"
你能把我引向正确的方向吗?我找了很多,但找不到解决办法。提前谢谢。
1条答案
按热度按时间dnph8jn41#
正如@dave\u thompson\u085所提到的,问题在于密码套件。我应该早点发现:)第二台服务器只有2个TLS1.2密码套件(不知道为什么或如何),而且都是gcm,不支持我的服务器。谢谢大家的帮助。