To test a REST-based web service, I created a JUnit test that employs the Jersey client classes. Once I changed the resource location to the https URL, I received the error "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 first, following the ideas on this
Stack Overflow thread, I added some code to set up a
ClientConfig with a
SSLContext for the Jersey
Client. Then I created a new trust store with the server certificate (rather than importing into the default Java trust store) and pointed command-line arguments to this new trust store (and providing its password).
However I continued to get the same error. But when I imported the server certificate into the default Java trust store, the error went away. And when I commented out all the
ClientConfig code, and just used
this.restWSClient = Client.create(); things continued to work! It's possible I may not have referenced the new trust store properly but at this moment, it doesn't matter.
One thing to note, SoapUI, which I previously used to test another web service over https on the same server, did not seem to require any client-side configuration (i.e. set up server certificate in trust store). Not sure if it simply trusts whatever certificate that it sees.