2016-11-15 1 views
0

ВведениеSoapFault: Нет доверенные сертификаты не найдено

Я работаю на функции для системы учета, которая принимает XML-файл, содержащий данные о продаже, отправляет его на правительственный сервер и получает ответное сообщение , Вам также нужны некоторые сертификаты для обеспечения подлинности отправителей. Я использую клиента от кого-то другого, чтобы выполнить всю сложную работу по шифрованию, вызвать веб-сервис, обрабатывать сертификаты, получать сообщения и т. Д. Мне нужно написать простое приложение, чтобы вызвать функцию этого клиента и отправить ему файл, certs и некоторые аргументы.

Ошибка

Мое приложение, как представляется, работает нормально при тестировании на сервере игровых площадок. Однако, когда я попробовал производственный сервер с производственным сообщением (даже производственные сообщения на производственных серверах не рассматриваются как фактические законные продажи до 1 декабря 2016 года, они только начинают это делать), приложение выдает ошибку, что крайне странно , так как у любых разработчиков, разрабатывающих подобное приложение позднее, не будет возможности обнаружить эту ошибку, пока они не выпустят приложение.

Проблема

Проблема заключается в том, что ошибка указывает на то в библиотеках шифрования/защиты клиента. Я никогда не занимался чем-то подобным, поэтому я абсолютно потерял то, с чего начать искать. Кроме того, ошибка кажется довольно редкой, и несколько заметок, которые я нашел на ней, в значительной степени не имеют отношения к моему проекту, или, по крайней мере, так они кажутся мне, учитывая мое несуществующее понимание области.

Ниже приведен стек. Если бы кто-нибудь, более разбирающийся в этих библиотеках, мог указать мне, где может быть ошибка, я был бы очень благодарен. Пожалуйста, спросите, нужна ли вам дополнительная информация/тестирование.

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

Сертификат сервера не является доверенным, это означает, что орган по сертификации, подписавший сертификат не содержится в Java trustore. Чтобы решить эту проблему, вам нужно получить сертификат ЦС и импортировать его в своем доверенном приложении или в хранилище jvm. Если сертификат самоподписан, вы должны импортировать этот сертификат сервера в качестве доверенного сертификата в хранилище.