意外错误:java.security.InvalidAlgorithmParameterException:trustAnchors 参数必须非空

问题描述 投票:0回答:3

嗨,

我编写了一个java代码,它连接到Salesforce并更新其中的值,当我从本地系统作为独立java应用程序运行它时,它工作得很好,但我的主要目标是将其作为一个filenet BPM 工作流程中的 java 组件,因此当工作流程过程到达此 java 组件时,它会抛出一个错误,如标题所示

整个堆栈堆栈跟踪如下

com.sforce.ws.ConnectionException: Failed to send request to https://login.salesforce.com/services/Soap/c/24.0/0DF90000000PX8r
    at com.sforce.ws.transport.SoapConnection.send(SoapConnection.java:129)
    at com.sforce.soap.enterprise.EnterpriseConnection.login(EnterpriseConnection.java:1052)
    at com.sforce.soap.enterprise.EnterpriseConnection.<init>(EnterpriseConnection.java:399)
    at salesforceupdate.SalesForceUpdate.main(SalesForceUpdate.java:70)
    at salesforceupdate.Callin.UpdateSL(Callin.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:611)
    at filenet.vw.integrator.adaptors.java.VWJavaAdaptor.execute(VWJavaAdaptor.java:426)
    at filenet.vw.integrator.base.VWAdaptorEx$AdaptorAction.run(VWAdaptorEx.java:120)
    at java.security.AccessController.doPrivileged(AccessController.java:284)
    at javax.security.auth.Subject.doAsPrivileged(Subject.java:727)
    at filenet.vw.integrator.base.VWAdaptorEx.run(VWAdaptorEx.java:360)
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at com.ibm.jsse2.n.a(n.java:42)
    at com.ibm.jsse2.tc.a(tc.java:96)
    at com.ibm.jsse2.tc.a(tc.java:340)
    at com.ibm.jsse2.tc.a(tc.java:555)
    at com.ibm.jsse2.tc.a(tc.java:510)
    at com.ibm.jsse2.tc.startHandshake(tc.java:381)
    at com.ibm.net.ssl.www2.protocol.https.c.afterConnect(c.java:151)
    at com.ibm.net.ssl.www2.protocol.https.d.connect(d.java:64)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1024)
    at com.ibm.net.ssl.www2.protocol.https.b.getOutputStream(b.java:51)
    at com.sforce.ws.transport.JdkHttpTransport.connectRaw(JdkHttpTransport.java:115)
    at com.sforce.ws.transport.JdkHttpTransport.connect(JdkHttpTransport.java:79)
    at com.sforce.ws.transport.SoapConnection.send(SoapConnection.java:107)
    ... 13 more
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at com.ibm.jsse2.util.e.<init>(e.java:117)
    at com.ibm.jsse2.util.d.a(d.java:20)
    at com.ibm.jsse2.hc.a(hc.java:58)
    at com.ibm.jsse2.hc.checkServerTrusted(hc.java:88)
    at filenet.ws.utils.jsse.FnTrustManager.checkServerTrusted(FnTrustManager.java:156)
    at com.ibm.jsse2.hb.a(hb.java:382)
    at com.ibm.jsse2.hb.a(hb.java:23)
    at com.ibm.jsse2.gb.n(gb.java:295)
    at com.ibm.jsse2.gb.a(gb.java:269)
    at com.ibm.jsse2.tc.a(tc.java:347)
    at com.ibm.jsse2.tc.g(tc.java:416)
    at com.ibm.jsse2.tc.a(tc.java:60)
    ... 21 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
    at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:287)
    at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:143)
    at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:101)
    at com.ibm.jsse2.util.e.<init>(e.java:17)
    ... 32 more

我已经用谷歌搜索了有关此错误的所有内容,并生成了域的 .crt 文件,并创建了 keystore 文件,并在我的代码中提到了这一点

 System.setProperty("javax.net.ssl.trustStore","C:\\Program Files\\IBM\\WebSphere\\AppServer\\java\\jre\\bin\\secure.ts");
 System.setProperty("javax.net.ssl.trustStorePassword", "xxxxx");

顺便说一句,我什至修改了WAS控制台中的密钥管理网络和证书

但我不断收到同样的错误..不知道该怎么办,任何帮助都会很棒

提前致谢

java salesforce websphere
3个回答
9
投票

此错误消息通常意味着无法读取您指定的信任库。我要检查的内容:

  • 路径是否正确? (我确定你检查过这个...)
  • 启动 JVM 的用户是否有足够的访问权限来读取 信任者?
  • 什么时候设置系统属性?调用 Web 服务时它们是否已设置?
  • 也许另一个组件已经覆盖了这些值。调用Web服务时系统属性是否仍然设置?
  • trustore 是否包含 Salesforce 证书并且文件是否未损坏(例如使用
    keytool -list
    检查)?

编辑:

  • 不要使用
    System.setProperty
    ,而是使用
    -Djavax.net.ssl.XXX
    启动 Java 进程时设置选项。提出此建议的原因如下:IBM 安全框架可能会在您设置属性之前读取选项(例如,在类的 static 块中)。当然,这是特定于框架的,可能会因版本而异。
    
        

1
投票

就我而言,我有 2 个重复的 Java 安装(OpenJDK 和 JDK-17)。
  • 我在为 OpenJDK 配置环境变量之后、卸载 OpenJDK 之前安装了 JDK-17。
  • 所以,也许这就是问题所在。
这就是我解决问题的方法
就我而言:

首先,我已经从我的电脑上彻底删除了openJDK和JDK-17(包括JDK-17/lib/security/cacerts)。
  • 然后,我删除了java环境变量并重新启动了计算机。
  • 接下来,我彻底检查了电脑上已经没有任何JDK了。
  • 最后,我刚刚重新安装了JDK-17(默认是JDK-17/lib/security/cacerts)。这对我来说效果很好。
注意:

在卸载之前先终止所有 Java 运行时任务。


0
投票

路径是否正确? (我确定你检查过这个......) 启动 JVM 的用户是否有足够的访问权限来读取 trustore? 什么时候设置系统属性?调用 Web 服务时它们是否已设置? 也许另一个组件已经覆盖了这些值。调用Web服务时系统属性是否仍然设置? trustore 是否包含 Salesforce 证书并且文件是否未损坏(例如使用 keytool -list 检查)? 编辑:

不要使用 System.setProperty,而是在使用 -Djavax.net.ssl.XXX 启动 Java 进程时设置选项。提出此建议的原因如下:IBM 安全框架可能会在您设置属性之前读取选项(例如,在类的静态块中)。当然,这是特定于框架的,可能会因版本而异。

您能否提供更多详细信息和命令来运行您的提案?

问候,

© www.soinside.com 2019 - 2024. All rights reserved.