Hi Tharindu, Thank you for the improvements suggested and when I executed the client app as Dulanja suggested I was able to confirm that the truststore used was infact the one I have specified and by using the method suggested in [1] I was able to get rid of the sun security validator exception (replacing the JRE keystore by my client apps' truststore), but the data doesn't get pushed to the database.
I tested the data service using soap ui and I can successfully push data to the database through soap. I am not sure if I have set the epr correctly in my code. Thanks in advance. [1] https://fdmanana.wordpress.com/2008/07/01/getting-a-servers-certificate-with-openssl/ Regards. Sabra Ossen. On Sun, May 17, 2015 at 10:17 AM, Tharindu Edirisinghe <tharin...@wso2.com> wrote: > Hi Sabra, > > One more thing to pay attention. If the remote server is fronted by a Load > Balancer (i.e NginX), then in your client app's truststore, you need to > have the public certificate of the load balancer instead of the remote > server's public certificate. > > Regards, > TharinduE > > On Sun, May 17, 2015 at 10:15 AM, Dulanja Liyanage <dula...@wso2.com> > wrote: > >> Hi Sabra, >> >> You can also start your client app with the following JVM argument and >> check which trust store is getting loaded, and also the certificate that's >> sent from the server side. >> >> -Djavax.net.debug=SSL,handshake,trustmanager >> >> Hope it helps. >> >> Thanks, >> Dulanja >> >> On Sun, May 17, 2015 at 9:54 AM, Tharindu Edirisinghe <tharin...@wso2.com >> > wrote: >> >>> 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 <sabra...@gmail.com> 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 >>>> Dev@wso2.org >>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>> >>>> >>> >>> >>> -- >>> >>> Tharindu Edirisinghe >>> Software Engineer | WSO2 Inc >>> Identity Server Team >>> mobile : +94 775 181586 >>> >>> _______________________________________________ >>> Dev mailing list >>> Dev@wso2.org >>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >>> >> >> >> -- >> Thanks & Regards, >> Dulanja Liyanage >> WSO2 Inc. >> M: +94776764717 >> > > > > -- > > Tharindu Edirisinghe > Software Engineer | WSO2 Inc > Identity Server Team > mobile : +94 775 181586 >
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev