SoapFault:找不到可信任的证书

时间:2016-11-15 13:35:37

标签: java security ssl certificate

简介

我正在研究会计系统的功能,该功能采用包含销售数据的XML文件,将其发送到政府服务器,并接收响应消息。您还需要一些证书来确保发件人的真实性。我使用其他人的客户端来完成加密,调用Web服务,处理证书,接收消息等所有艰苦工作。我只需编写一个简单的应用程序来调用该客户端的函数,并将其发送给文件,证书和一些参数。

错误

在游乐场服务器上测试时,我的应用似乎工作正常。当我尝试使用生产消息生产服务器时(即使生产服务器上的生产消息在2016年12月1日之前都没有被视为实际的合法销售,他们只是刚刚启动),该应用程序会抛出错误,这非常奇怪,因为任何开发类似应用程序的开发人员在发布应用程序之前都无法发现此错误。

问题

问题是,错误指向客户端的加密/安全库中的某个位置。我从来没有处理过任何类似的事情,所以我绝对不知道从哪里开始寻找。最重要的是,这个错误似乎相当罕见,而我在其上发现的几个注释与我的项目基本无关,或者至少就我们对该区域不存在的理解而言。

下面是堆栈跟踪。如果对这些图书馆更精通的人能指出我可能出现的错误,我将非常感激。请询问您是否需要更多信息/测试。

    WARNING: Interceptor for {http://fs.mfcr.cz/eet/schema/v3}EETService#{http://fs.mfcr.cz/eet/schema/v3}OdeslaniTrzby has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: Error during certificate path validation: No trusted certs found
        at org.apache.cxf.ws.security.wss4j.WSS4JUtils.createSoapFault(WSS4JUtils.java:277)
        at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessageInternal(WSS4JInInterceptor.java:333)
        at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessage(WSS4JInInterceptor.java:190)
        at cz.tomasdvorak.eet.client.security.SecureEETCommunication$1.handleMessage(SecureEETCommunication.java:135)
        at cz.tomasdvorak.eet.client.security.SecureEETCommunication$1.handleMessage(SecureEETCommunication.java:119)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
        at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:802)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1673)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1551)
        at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1348)
        at org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
        at org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:215)
        at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
        at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651)
        at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
        at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:516)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:425)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:326)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:279)
        at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
        at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:138)
        at com.sun.proxy.$Proxy70.odeslaniTrzby(Unknown Source)
        at cz.tomasdvorak.eet.client.EETClientImpl.submitReceipt(EETClientImpl.java:39)
        at cz.tomasdvorak.eetdemo.Main.main(Main.java:134)
Caused by: org.apache.wss4j.common.ext.WSSecurityException: Error during certificate path validation: No trusted certs found
        at org.apache.wss4j.common.crypto.Merlin.verifyTrust(Merlin.java:877)
        at cz.tomasdvorak.eet.client.security.MerlinWithCRLDistributionPointsExtension.verifyTrust(MerlinWithCRLDistributionPointsExtension.java:34)
        at org.apache.wss4j.dom.validate.SignatureTrustValidator.verifyTrustInCerts(SignatureTrustValidator.java:108)
        at org.apache.wss4j.dom.validate.SignatureTrustValidator.validate(SignatureTrustValidator.java:64)
        at org.apache.wss4j.dom.processor.SignatureProcessor.handleToken(SignatureProcessor.java:185)
        at org.apache.wss4j.dom.WSSecurityEngine.processSecurityHeader(WSSecurityEngine.java:428)
        at org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor.handleMessageInternal(WSS4JInInterceptor.java:278)
        ... 23 more

1 个答案:

答案 0 :(得分:2)

服务器证书不受信任,这意味着签署证书的证书颁发机构不包含在Java信任中。要解决此问题,您必须获取CA证书并导入您的应用程序信任或jvm信任。或者,如果证书是自签名的,则应将此服务器证书作为可信证书导入信任。