我正在 Linux Centos 服务器上开发 Java 1.7 应用程序,该应用程序使用 SOAP 连接到第三方。一切正常,直到第三方将其 SSL 从 TLSv1.1 升级到 TLSv1.2。现在,当我们尝试调用他们的服务时,我们得到:
javax.net.ssl.SSLHandshakeException:SSLHandshakeException 调用 https://webservices.abc.company.com:收到致命警报:handshake_failure
我们还有另一台 Linux Centos 服务器,它使用完全相同的代码库,但它可以毫无错误地调用 SOAP 服务。所以我尝试进行比较以找出任何差异。我能找到的差异是,一些目录结构不同,但我认为适用的文件是相同的。例如,
/etc/httpd/conf.d/ssl.conf
都在同一个地方,并且都有相同的密码:
SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
#SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder on
它们都具有第三方公司颁发的相同证书。
/etc/httpd/ssl/abc.crt
我已经停止防火墙了。
sudo systemctl stop firewalld
问题
您知道我还可以在哪里找到以及可以尝试什么吗?
答案1
您必须使用支持 TLS 1.2 的 Java 版本(我不确定 1.7.0_09 是否支持,但我知道 1.7 的后续版本支持),并且它必须是已启用的协议之一。此问题对此有详细说明:https://stackoverflow.com/questions/39157422/how-to-enable-tls-1-2-in-java-7
Java 1.7 自 2015 年起就已 EOL,因此升级可能是避免未来出现问题的最佳方式。