调用EJB的Web服务会创建SSL异常

时间:2011-10-03 10:59:24

标签: web-services java-ee glassfish jax-ws

我有一个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对问题没有影响。

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

这是因为客户端不知道它应该使用哪个信任库 - 因此它不信任该服务并且SSL握手失败。使用以下VMargs运行'client':

-Djavax.net.ssl.trustStore=${truststore.location}
-Djavax.net.ssl.trustStorePassword=${ssl.password}

如果您使用NetBeans,则可以在项目属性中设置它。