web-dev-qa-db-ja.com

予期しないエラー:Java.security.InvalidAlgorithmParameterException:trustAnchorsパラメーターは空でない必要があります

ひえ、

Salesforceに接続し、そこで値を更新するJavaコードを作成しました。ローカルシステムから-として実行すると、正常に機能します。 スタンドアロン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コンソールのキーmanagemnetと証明書

しかし、私は同じエラーを受け取り続けます..何をすべきかわからない、どんな助けも素晴らしいでしょう

前もって感謝します

13
Bharath R

このエラーメッセージは通常、指定したトラストストアを読み取ることができないことを意味します。私がチェックするもの:

  • パスは正しいですか? (これをチェックしたと思います...)
  • JVMを開始したユーザーは、トラストを読み取るのに十分なアクセス権限を持っていますか?
  • システムプロパティはいつ設定しますか? Webサービスが呼び出されたときにすでに設定されていますか?
  • おそらく、別のコンポーネントが値をオーバーライドしています。 Webサービスが呼び出されたときに、システムプロパティはまだ設定されていますか?
  • トラストアにはSalesforce証明書が含まれており、ファイルは破損していませんか(たとえば、keytool -listで確認してください)?

編集:

  • System.setPropertyを使用せず、Javaプロセスを-Djavax.net.ssl.XXXで開始するときにオプションを設定します。このアドバイスの理由は次のとおりです。IBMセキュリティー・フレームワークは、 options beforeプロパティを設定します(たとえば、クラスのstaticブロックで)。もちろん、これはフレームワーク固有であり、バージョンごとに変わる可能性があります。
7
Peter Keller