Feby Baby created OLINGO-1216: --------------------------------- Summary: How to consume Odata service having self-signed certificate using Olingo in java? Key: OLINGO-1216 URL: https://issues.apache.org/jira/browse/OLINGO-1216 Project: Olingo Issue Type: Question Components: odata4-client Affects Versions: (Java) V4 4.4.0 Environment: java, Spring boot Reporter: Feby Baby Priority: Blocker
I am trying to consume Redfish API which uses OData service in Java using Spring boot application. I understand that Olingo and Odata4j are the java libraries for consuming OData service. I tried using Olingo but getting error as the https server is having a self-signed certificate. Initially, I tried to access the redfish API using RestTemplate which worked out well. But for getting @odata.id tag information, we need to use the OData specific library. Sample json output of Redfish API: { @odata.context: "/redfish/v1/$metadata#ServiceRoot.ServiceRoot", @odata.id: "/redfish/v1", @odata.type: "#ServiceRoot.v1_0_2.ServiceRoot", AccountService: { @odata.id: "/redfish/v1/Managers/iDRAC.Embedded.1/AccountService" }, Chassis: { @odata.id: "/redfish/v1/Chassis" }, Description: "Root Service", EventService: { @odata.id: "/redfish/v1/EventService" }, Id: "RootService", JsonSchemas: { @odata.id: "/redfish/v1/JSONSchemas" }, Links: { Sessions: { @odata.id: "/redfish/v1/Sessions" } }, Managers: { @odata.id: "/redfish/v1/Managers" }, Name: "Root Service", RedfishVersion: "1.0.2", Registries: { @odata.id: "/redfish/v1/Registries" }, SessionService: { @odata.id: "/redfish/v1/SessionService" }, Systems: { @odata.id: "/redfish/v1/Systems" }, Tasks: { @odata.id: "/redfish/v1/TaskService" } } Code: ODataClient client = ODataClientFactory.getClient(); String serviceUrl = "https://IP_address/redfish/v1/Systems/"; client.getConfiguration().setHttpClientFactory(new BasicAuthHttpClientFactory("[uname]", "[pswd]")); URI absoluteUri = client.newURIBuilder(serviceUrl).build(); ODataEntitySetIteratorRequest<ClientEntitySet, ClientEntity> request = client.getRetrieveRequestFactory().getEntitySetIteratorRequest(absoluteUri); // odata4 sample/server limitation not handling metadata=full request.setAccept("application/json;odata.metadata=minimal"); ODataRetrieveResponse<ClientEntitySetIterator<ClientEntitySet, ClientEntity>> response = request.execute(); ClientEntitySetIterator<ClientEntitySet, ClientEntity> iterator = response.getBody(); I am getting the following certificate related error while trying to consume the OData service API: [Request processing failed; nested exception is org.apache.olingo.client.api.http.HttpClientException: 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] with root cause sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:141) ~[na:1.8.0_92] at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:126) ~[na:1.8.0_92] at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) ~[na:1.8.0_92] at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) ~[na:1.8.0_92] at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) ~[na:1.8.0_92] at sun.security.validator.Validator.validate(Validator.java:260) ~[na:1.8.0_92] at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324) ~[na:1.8.0_92] at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229) ~[na:1.8.0_92] at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124) ~[na:1.8.0_92] at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1491) ~[na:1.8.0_92] at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216) ~[na:1.8.0_92] at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979) ~[na:1.8.0_92] at sun.security.ssl.Handshaker.process_record(Handshaker.java:914) ~[na:1.8.0_92] at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062) ~[na:1.8.0_92] at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_92] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ~[na:1.8.0_92] at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) ~[na:1.8.0_92] at org.apache.http.conn.ssl.SSLSocketFactory.createLayeredSocket(SSLSocketFactory.java:573) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:557) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:414) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:326) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:610) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:445) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:835) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.3.jar:4.5.3] at org.apache.olingo.client.core.communication.request.AbstractODataRequest.doExecute(AbstractODataRequest.java:301) ~[odata-client-core-4.4.0.jar:na] at org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetIteratorRequestImpl.execute(ODataEntitySetIteratorRequestImpl.java:59) ~[odata-client-core-4.4.0.jar:na] at org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetIteratorRequestImpl.execute(ODataEntitySetIteratorRequestImpl.java:36) ~[odata-client-core-4.4.0.jar:na] Kindly help me to resolve the issue. Please find below the links which I referred. [https://templth.wordpress.com/2015/04/27/implementing-an-odata-service-with-olingo/][1] [1]: https://templth.wordpress.com/2015/04/27/implementing-an-odata-service-with-olingo/ -- This message was sent by Atlassian JIRA (v6.4.14#64029)