【问题标题】:WebSphere Liberty Profile 17.0.0.4 Breaks JAX-RS Client TrustStore-WebSphere Liberty Profile 17.0.0.4 破坏了 JAX-RS 客户端 TrustStore-
【发布时间】:2018-01-24 02:07:17
【问题描述】:

我们在 WebSphere Liberty Profile 应用程序中使用 JAX-RS 2.0 客户端来调用外部服务。它在带有 Java 8.0 的 WLP 16.0.0.4 上运行良好。当我尝试在 17.0.0.4 上运行相同的应用程序时,我们在信任库上收到证书错误。

经过大量试验和错误,WLP 似乎不再从以下属性加载信任库(这是来自我的jvm.options 文件):

-Djavax.net.ssl.trustStore=../../shared/resources/security/trust_yourIBM_TEST.jks

以上内容在 16.0.0.4 中有效,但 javax.net.ssl.trustStore 属性不再用于指向信任库(如果我将该属性指向 16.0.0.4 中丢失的文件,我会收到一个错误,指出该文件是未找到,但在 17.0.0.4 中,我没有收到错误)。所以我添加了以下内容:

-Djavax.net.ssl.trustStore=../../shared/resources/security/trust_yourIBM_TEST.jks
-Dcom.ibm.ssl.trustStore=../../shared/resources/security/trust_yourIBM_TEST.jks

这仍然不起作用。我在任何地方都找不到 WLP 发行说明来解释 JAX-RS 在 WLP 17.x 中的行为不同。

有谁知道我如何指向 WLP 17.0.0.4 中的信任库?

===========================================

更新 #1 - 2018/01/24

我使用完全相同的 JDK、server.xmlbootstrap.propertiesjvm.options 文件,以及相同的应用程序文件。唯一的区别是 WLP 实例。我还为默认信任库使用相同的条目,它指向与我在上面粘贴的jvm.properties 中指向的相同文件。以下是启动日志条目:

17.0.0.4
product = WebSphere Application Server 17.0.0.4 (wlp-1.0.19.201712061531)
wlp.install.dir = C:/IBM/WLP_17.0.0.4/
java.home = C:\IBMJava80\jre
java.version = 1.8.0_151
java.runtime = Java(TM) SE Runtime Environment (8.0.5.7 - pwa6480sr5fp7-20171216_01(SR5 FP7))

16.0.0.4
product = WebSphere Application Server 16.0.0.4 (wlp-1.0.15.cl160420161113-0206)
wlp.install.dir = C:/IBM/WLP_16.0.0.4/
java.home = C:\IBMJava80\jre
java.version = 1.8.0_151
java.runtime = Java(TM) SE Runtime Environment (8.0.5.7 - pwa6480sr5fp7-20171216_01(SR5 FP7))

这是我在 16.0.0.4 中将信任库更改为不存在的文件时遇到的错误:

[1/24/18 10:50:06:025 EST] 0000006e id=         uribm.services.expensesaggregator.ejb.ExpensesEjbCommonUtils E callUnifiedProfile() Exception has occurred Exception encountered during call to UP: javax.ws.rs.ProcessingException: javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://w3-services1.w3-969.ibm.com/myw3/unified-profile/v1/docs/instances/masterByEmail?email=dlwester%40us.ibm.com: java.security.cert.CertificateException: No X509TrustManager implementation available for [userId=dlwester@us.ibm.com] : javax.net.ssl.SSLHandshakeException: SSLHandshakeException invoking https://w3-services1.w3-969.ibm.com/myw3/unified-profile/v1/docs/instances/masterByEmail?email=dlwester%40us.ibm.com: java.security.cert.CertificateException: No X509TrustManager implementation available

这是我的密钥库/信任库条目(信任库指向与jvm.options 相同的文件):

<!-- default keystore -->
<keyStore id="defaultKeyStore"
          location="${keystoreLocation}"
          password="${keystorePassword}" />

<!-- default truststore -->
<keyStore id="defaultTrustStore"
          location="${truststoreLocation}"
          password="${truststorePassword}" />

<ssl id="sslConfig"
     keyStoreRef="defaultKeyStore"
     trustStoreRef="defaultTrustStore"
     sslProtocol="SSL_TLSv2"
     serverKeyAlias="${serverKeyAlias}" />

=================

更新 #2

我在 WLP 中添加了 transportSecurity-1.0 功能,现在如果我指向一个不存在的文件,我会在 17.0.0.4 中遇到错误。如果我指向正确的信任库文件,我现在会得到一个不同的错误:

[1/24/18 12:03:19:905 EST] 0000003d id=         com.ibm.w3.security.tai.OAuthDownStreamTAI                   E getSslSocketFactoryWithTrustStore() exception encountered on sslContext.init() for truststore C:/IBM/WLP_17.0.0.4/usr/shared/resources//security/trust_yourIBM_TEST.jks - java.security.KeyManagementException: Default SSLContext is initialized automatically

我需要调查一下这个错误。

【问题讨论】:

  • Liberty 从不查看或加载 javax.net.ssl.* 属性。可能是,如果您没有 SSL 配置 server.xml,您可能最终会使用 JDK 的默认 SSLContext,该 SSLContext 将从 javax.net.ssl.* 属性创建。如果在 16.0.0.4 上提供了错误的文件,您会得到什么错误?从 17.0.0.1 开始,围绕对出站 SSL 的支持对 SSL 进行了一些更改。但我真的需要弄清楚 16.0.0.4 在你的情况下使用的是什么,我猜是 JDK 的默认值,而不是 Liberty 创建的 SSLContext。
  • 另一个问题。 JDK 是否在您更新 WLP 的同时更新?你用的JDK是什么级别的?
  • 阿莱恩,感谢您的回复。请参阅上面我原来的帖子中的更新 #1。
  • 在将transportSecurity-1.0 添加到 WLP 功能后,还包括上面的更新 #2。
  • 16.0.0.4 听起来确实像是来自 JSSE 的错误,想知道在这种情况下您是否使用了 JSSE SSLContext。 server.xml 文件是否也指向不存在的信任库?您使用的是 ssl-1.0 功能吗?使用 transportSecurity-1.0 功能处理事情的方式有所不同。你可以在这里找到信息ibm.com/support/knowledgecenter/en/SSAW57_liberty/…

标签: ssl jax-rs websphere-liberty


【解决方案1】:

Alaine 把我引向了正确的方向,所以这个答案的功劳归于他!

幸运的是,这个问题的解决方案并不复杂。我不得不使用 WLP 功能 transportSecurity-1.0 而不是 ssl-1.0

我必须在server.xml 中将以下内容添加到我的 SSL 配置中:

<sslDefault sslRef="sslConfig" />

我们的 TAI for OIDC 也遇到了问题。我不得不替换以下语句:

SSLContext sslContext = SSLContext.getDefault();

与:

SSLContext sslContext = SSLContext.getInstance("TLSv1.2");

简而言之,问题在于默认 SSL 配置是不可变的,因此您必须确保创建自己的配置来覆盖它,而不是更改它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多