Hi Sabra, I can see that for making the SSL call you are setting the truststore path and the password as system properties.
*System.setProperty(TRUST_STORE_PROPERTY, (new File(TRUST_STORE_PATH).getAbsolutePath())); System.setProperty(TRUST_STORE_PASSWORD_PROPERTY, TRUST_STORE_PASSWORD);* This is not recommended because assume that you have another client application which sets those system properties. Then the truststore path and password are overwritten. So at runtime your client may be using a different truststore where you don't have the server's public certificate imported in that truststore. 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 Above exception happens when the server's public certificate is not found in the client app's truststore. One simple solution is in you client app, you can print the system properties for truststore where it makes the HTTPS call. Then you can verify whether it uses the correct truststore. If it uses the correct trustore, make sure that you export the server's public certificate and import to that truststore. A sample code is available in [1] where it makes an HTTPS call without setting the truststore as system properties. You can refer that. It is the recommended way as it doesn't use system properties. If you need more help, please let me know. [1] https://github.com/wso2-dev/carbon-platform-integration/blob/master/test-automation-framework/org.wso2.carbon.automation.test.utils/src/main/java/org/wso2/carbon/automation/test/utils/generic/MutualSSLClient.java Thanks, TharinduE On Sat, May 16, 2015 at 7:55 PM, Sabra Ossen <[email protected]> wrote: > Hi, > > I have deployed a Data Service in WSO2 Cloud and I am trying to push data > to the data service. > > I have specified the code below which connects to the dataservice deployed. > > > > > > > > > > > > > > > > *String epr = > "https://appserver.dev.cloud.wso2.com/services/t/sabra8339/dataservice1-default-SNAPSHOT > <https://appserver.dev.cloud.wso2.com/services/t/sabra8339/dataservice1-default-SNAPSHOT>"; > System.setProperty(TRUST_STORE_PROPERTY, (new > File(TRUST_STORE_PATH).getAbsolutePath())); > System.setProperty(TRUST_STORE_PASSWORD_PROPERTY, TRUST_STORE_PASSWORD); > ConfigurationContext ctx = ConfigurationContextFactory > .createConfigurationContextFromFileSystem("/home/sabra/repository", > null); WSO2MarketingDashboardDataServiceStub stub = new > WSO2MarketingDashboardDataServiceStub(ctx, epr); ServiceClient client = > stub._getServiceClient(); Options options = client.getOptions(); > client.engageModule(MODULE); options.setUserName(USERNAME); > options.setPassword(PASSWORD); > options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, > loadPolicy(POLICY_FILE_PATH));* > > But I get the following error when I execute the program. > > May 15, 2015 11:57:25 AM org.apache.commons.httpclient.HttpMethodDirector > executeWithRetry > *INFO: I/O exception (org.apache.axis2.AxisFault) caught when processing > request: 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* > May 15, 2015 11:57:25 AM org.apache.commons.httpclient.HttpMethodDirector > executeWithRetry > INFO: Retrying request > May 15, 2015 11:57:25 AM org.apache.axis2.transport.http.HTTPSender > sendViaPost > INFO: Unable to sendViaPost to url[ > https://appserver.dev.cloud.wso2.com/services/t/sabra8339/dataservice1-default-SNAPSHOT > ] > 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 org.apache.axis2.AxisFault.makeFault(AxisFault.java:430) > at > org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:78) > at > org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:84) > at > org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499) > at > org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114) > at > org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) > at > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) > at > org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) > at > org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) > at > org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:622) > at > org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193) > at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:451) > at > org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:278) > at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:442) > at > org.apache.axis2.description.OutOnlyAxisOperationClient.executeImpl(OutOnlyAxisOperation.java:297) > at > org.apache.axis2.client.OperationClient.execute(OperationClient.java:149) > at > org.wso2.dashboard.marketing.client.WSO2MarketingDashboardDataServiceStub.insertWebsiteVisitorsPerWeek(WSO2MarketingDashboardDataServiceStub.java:610) > at DataServiceConnector.publishData(DataServiceConnector.java:72) > at Application.main(Application.java:8) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) > at java.lang.reflect.Method.invoke(Method.java:606) > at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) > Caused by: com.ctc.wstx.exc.WstxIOException: 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.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1687) > at com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:288) > at > org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.close(XMLStreamWriterWrapper.java:46) > at > org.apache.axiom.om.impl.MTOMXMLStreamWriter.close(MTOMXMLStreamWriter.java:188) > at > org.apache.axiom.om.impl.dom.NodeImpl.serializeAndConsume(NodeImpl.java:844) > at > org.apache.axis2.transport.http.SOAPMessageFormatter.writeTo(SOAPMessageFormatter.java:74) > ... 23 more > Caused by: javax.net.ssl.SSLException: 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 sun.security.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1496) > at sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1508) > at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:70) > at > java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) > at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) > 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:1685) > ... 28 more > Caused by: 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 sun.security.ssl.Alerts.getSSLException(Alerts.java:192) > at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904) > at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:279) > at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:273) > at > sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1446) > at > sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:209) > at sun.security.ssl.Handshaker.processLoop(Handshaker.java:913) > at sun.security.ssl.Handshaker.process_record(Handshaker.java:849) > at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1023) > at > sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) > at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:709) > at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) > at > java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) > at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) > 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.BaseStreamWriter.flush(BaseStreamWriter.java:311) > at > org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.flush(XMLStreamWriterWrapper.java:50) > at > org.apache.axiom.om.impl.MTOMXMLStreamWriter.flush(MTOMXMLStreamWriter.java:198) > at > org.apache.axiom.om.impl.dom.NodeImpl.serializeAndConsume(NodeImpl.java:842) > ... 24 more > Caused by: sun.security.validator.ValidatorException: PKIX path building > failed: sun.security.provider.certpath.SunCertPathBuilderException: unable > to find valid certification path to requested target > at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385) > at > sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) > at sun.security.validator.Validator.validate(Validator.java:260) > at > sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326) > at > sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) > at > sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126) > at > sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1428) > ... 40 more > Caused by: sun.security.provider.certpath.SunCertPathBuilderException: > unable to find valid certification path to requested target > at > sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196) > at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268) > at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380) > ... 46 more > > I appreciate any help on this issue. > > Thanks. > Sabra Ossen. > > _______________________________________________ > Dev mailing list > [email protected] > http://wso2.org/cgi-bin/mailman/listinfo/dev > > -- Tharindu Edirisinghe Software Engineer | WSO2 Inc Identity Server Team mobile : +94 775 181586
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
