Salesforce 证书问题:sun.security.validator.ValidatorException:PKIX 路径构建失败
Salesforce certificate issue : sun.security.validator.ValidatorException: PKIX path building failed
通过 WSO2 连接到 Salesforce 时,我收到以下错误。
Unable to sendViaPost to url[https://semtech.my.salesforce.com/services/Soap/c/26.0/xxxxxJelG/0xxxxk] {org.apache.axis2.transport.http.HTTPSender}
org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1293)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1305)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at org.apache.commons.httpclient.ChunkedOutputStream.flush(ChunkedOutputStream.java:191)
at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:99)
at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:214)
at com.ctc.wstx.sw.BufferingXmlWriter.close(BufferingXmlWriter.java:194)
at com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1690)
... 43 more
似乎在 Salesforce 端更改了证书。这正在影响我们的生产现场。我该如何解决?
尝试检查 this。希望这会有所帮助。
我想问题是服务器端的证书会被更改,而您的 java 不会意识到这一点。所以我认为你应该努力让 Java 知道证书的变化。我已经在上面提供的 link 中解释了相同的内容。
首先找出您使用的 salesforce api 版本。
然后转到 https://login.salesforce.com/services/Soap/u/32.0,单击地址栏上的锁图标,单击 'Connection' 选项卡,然后单击 link 'Certificate Information'。从 'Certificate Viewer'、select 选项卡 'Details' 并单击 'Export' 按钮并将证书 (sf.com) 下载到首选位置。
这里的 32.0 是 salesforce api 版本。
这是您在 Salesforce 中使用的 API 版本。为此,请登录 https://developer.salesforce.com/ 并单击“设置”。在左侧导航窗格中,单击“开发”下的 API。生成其中一个 API 以检查版本。这并不总是 v20.0 或 32。这可能有所不同。
例如,在生成的wsdl中,会显示如下注释。它显示 API 版本。在这个例子中是 v32.0
Salesforce.com 企业 Web 服务 API 版本 32.0
下载后,发出以下命令将 salesforce 的 public 证书导入客户端-truststore.jks.
$ keytool -importcert -file $somepath/sf.com -keystore $ESB_HOME/repository/resources/security/client-truststore.jks -alias "sf"
重新启动WSO2 ESB服务器并再次调用API,您将得到预期的结果。
通过 WSO2 连接到 Salesforce 时,我收到以下错误。
Unable to sendViaPost to url[https://semtech.my.salesforce.com/services/Soap/c/26.0/xxxxxJelG/0xxxxk] {org.apache.axis2.transport.http.HTTPSender}
org.apache.axis2.AxisFault: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1293)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1305)
at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:43)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
at org.apache.commons.httpclient.ChunkedOutputStream.flush(ChunkedOutputStream.java:191)
at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:99)
at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:214)
at com.ctc.wstx.sw.BufferingXmlWriter.close(BufferingXmlWriter.java:194)
at com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1690)
... 43 more
似乎在 Salesforce 端更改了证书。这正在影响我们的生产现场。我该如何解决?
尝试检查 this。希望这会有所帮助。
我想问题是服务器端的证书会被更改,而您的 java 不会意识到这一点。所以我认为你应该努力让 Java 知道证书的变化。我已经在上面提供的 link 中解释了相同的内容。
首先找出您使用的 salesforce api 版本。
然后转到 https://login.salesforce.com/services/Soap/u/32.0,单击地址栏上的锁图标,单击 'Connection' 选项卡,然后单击 link 'Certificate Information'。从 'Certificate Viewer'、select 选项卡 'Details' 并单击 'Export' 按钮并将证书 (sf.com) 下载到首选位置。 这里的 32.0 是 salesforce api 版本。
这是您在 Salesforce 中使用的 API 版本。为此,请登录 https://developer.salesforce.com/ 并单击“设置”。在左侧导航窗格中,单击“开发”下的 API。生成其中一个 API 以检查版本。这并不总是 v20.0 或 32。这可能有所不同。
例如,在生成的wsdl中,会显示如下注释。它显示 API 版本。在这个例子中是 v32.0
Salesforce.com 企业 Web 服务 API 版本 32.0
下载后,发出以下命令将 salesforce 的 public 证书导入客户端-truststore.jks.
$ keytool -importcert -file $somepath/sf.com -keystore $ESB_HOME/repository/resources/security/client-truststore.jks -alias "sf"
重新启动WSO2 ESB服务器并再次调用API,您将得到预期的结果。