我有一个JAX-WS Web服务,它在同一台服务器上调用远程EJB。一切都在Glassfish 3.1.1上运行,应用程序部署了EAR - 一个用于Web服务,另一个用于EJB。这在本地工作正常,但在部署到测试服务器时,我得到关于不受信任(自签名)SSL证书的典型例外。这是一个相关的摘录:
Caused by: com.sun.xml.ws.client.ClientTransportException: HTTP transport error: 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.xml.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:132)
异常发生在进行EJB调用的webservice中的行上。这让我感到困惑,因为我不希望在那时与HTTPS有任何关系。
到目前为止,最有希望的角度是这与事务协调有关,如here所述,默认情况下应该使用HTTPS。但是,设置com.sun.xml.ws.tx.preferredScheme = http对问题没有影响。
非常感谢任何建议。
答案 0 :(得分:0)
这是因为客户端不知道它应该使用哪个信任库 - 因此它不信任该服务并且SSL握手失败。使用以下VMargs运行'client':
-Djavax.net.ssl.trustStore=${truststore.location}
-Djavax.net.ssl.trustStorePassword=${ssl.password}
如果您使用NetBeans,则可以在项目属性中设置它。