【发布时间】:2019-09-18 14:01:21
【问题描述】:
我们已经使用 Open Liberty webprofile 8 构建了一个 Docker 映像,目前对 salesforce API 的 HTTPS 出站调用失败,从日志看来,TLSV1 似乎只启用了,从所有读数看来,似乎需要 TLSV1.2启用。我对 Open Linberty 很陌生,我不知道该怎么做。在我的 Server.xml 文件中,我有以下条目:-
<keyStore id="defaultKeyStore" password="Liberty"/>
<ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" sslProtocol="SSL_TLSv2"/>
但即使在那之后我也遇到了错误并且 HTTPS 调用失败了:-
phx.salesforceliveagent.com/136.147.100.1:443 with timeout 0
2019-04-29T23:05:08.840527853Z 2019-04-29 23:05:08.839 DEBUG 1 --- [cutor-thread-16] o.a.h.c.ssl.SSLConnectionSocketFactory : Enabled protocols: [TLSv1]
2019-04-29T23:05:08.848027084Z 2019-04-29 23:05:08.845 DEBUG 1 --- [cutor-thread-16] o.a.h.c.ssl.SSLConnectionSocketFactory : Enabled cipher suites:[SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384, SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA384, SSL_RSA_WITH_AES_256_CBC_SHA256, SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, SSL_ECDH_RSA_WITH_AES_256_CBC_SHA384, SSL_DHE_RSA_WITH_AES_256_CBC_SHA256, SSL_DHE_DSS_WITH_AES_256_CBC_SHA256, SSL_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, SSL_ECDHE_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_AES_256_CBC_SHA, SSL_ECDH_ECDSA_WITH_AES_256_CBC_SHA, SSL_ECDH_RSA_WITH_AES_256_CBC_SHA, SSL_DHE_RSA_WITH_AES_256_CBC_SHA, SSL_DHE_DSS_WITH_AES_256_CBC_SHA, SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA256, SSL_RSA_WITH_AES_128_CBC_SHA256, SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, SSL_ECDH_RSA_WITH_AES_128_CBC_SHA256, SSL_DHE_RSA_WITH_AES_128_CBC_SHA256, SSL_DHE_DSS_WITH_AES_128_CBC_SHA256, SSL_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, SSL_ECDHE_RSA_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_AES_128_CBC_SHA, SSL_ECDH_ECDSA_WITH_AES_128_CBC_SHA, SSL_ECDH_RSA_WITH_AES_128_CBC_SHA, SSL_DHE_RSA_WITH_AES_128_CBC_SHA, SSL_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, SSL_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, SSL_ECDHE_RSA_WITH_AES_256_GCM_SHA384, SSL_RSA_WITH_AES_256_GCM_SHA384, SSL_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, SSL_ECDH_RSA_WITH_AES_256_GCM_SHA384, SSL_DHE_DSS_WITH_AES_256_GCM_SHA384, SSL_DHE_RSA_WITH_AES_256_GCM_SHA384, SSL_ECDHE_RSA_WITH_AES_128_GCM_SHA256, SSL_RSA_WITH_AES_128_GCM_SHA256, SSL_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, SSL_ECDH_RSA_WITH_AES_128_GCM_SHA256, SSL_DHE_RSA_WITH_AES_128_GCM_SHA256, SSL_DHE_DSS_WITH_AES_128_GCM_SHA256]
2019-04-29T23:05:08.852594802Z 2019-04-29 23:05:08.851 DEBUG 1 --- [cutor-thread-16] o.a.h.c.ssl.SSLConnectionSocketFactory : Starting handshake
2019-04-29T23:05:08.905209219Z [err] javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
2019-04-29T23:05:09.063121768Z [err] at com.ibm.jsse2.k.a(k.java:42)
2019-04-29T23:05:09.067062984Z [err] at com.ibm.jsse2.k.a(k.java:37)
2019-04-29T23:05:09.098532614Z [err] at com.ibm.jsse2.av.b(av.java:549)
2019-04-29T23:05:09.101687527Z [err] at com.ibm.jsse2.av.a(av.java:715)
我不确定如何解决此握手失败问题?有什么帮助吗?
2019 年 4 月 30 日更新:--已解决:- 开发团队修复了那里的代码,以确保强制使用 TSLv1.2,这暂时为我们解决了问题。感谢 Alasdair 关于创建 jvm.options 文件和创建环境变量以设置为 TLSv1.2 的想法,以防万一其他人在未来遇到困难时可以尝试。
更新 05.01/2019--> 来自 IBM 的 Alasdir 和 Brian S Paskin 还帮助我处理了 jvm.options 文件,它应该如下所示:-
-Dhttps.protocols=TLSv12
-Djdk.tls.client.protocols=TLSv12
-Dhttps.protocols=TLSv12
-Dcom.ibm.jsse2.overrideDefaultProtocol=TLSv12
如果有人想走这条路。
【问题讨论】:
-
你能添加你正在使用的Java版本吗? console.log 输出的第一行就足够了。或者messages.log中的java版本
-
我无法从堆栈中判断是否正在使用 Liberty 的 SSL 配置。如果正在使用它,那么将 sslProtocol 设置为“TLSv1.2”可能会有所帮助。如果此连接未使用 Liberty 的 SSL 配置,则尝试将系统属性 jdk.tls.client.protocols 设置为“TLSv1.2”。你可以在这里找到更多信息www-01.ibm.com/support/docview.wss?uid=nas8N1022279
-
谢谢你,Alaine,我在某处读到我可以使用 server.env 中的那些客户端 ENV 变量和你提到的值,但我不确定在哪里复制这个 server.env 文件应该与服务器.xml?我正在创建一个 docker 映像,所以我需要知道复制包含这些系统属性/env 变量的文件的位置,这些系统属性/env 变量可以驻留在 server.env 文件中?
-
ty Alasdair,我们使用的是 Java 8,我认为它是 Open Liberty:webProfile8 Docker 映像的默认设置
-
已解决:- 开发团队修复了那里的代码,以确保强制使用 TSLv1.2,这暂时为我们解决了这个问题。感谢 Alasdair 关于创建 jvm.options 文件和创建环境变量以设置为 TLSv1.2 的想法,以防万一其他人在未来遇到困难时可以尝试。
标签: ssl websphere-liberty open-liberty