I’m not sure if I’m daft or just missing something super obvious, but I’m 
trying to setup HttpClient to connect to a Spring Boot server using a self 
signed cert, pretty much all day.   Works fine via Chome, Python’s ‘requests’ 
module, and Objective-C but no matter what I do, this exception haunts me.

java.lang.RuntimeException: 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.zorroa.archivist.sdk.client.ExceptionTranslator.translate(ExceptionTranslator.java:9)
 ~[archivist-sdk-0.17.0.jar:na]
        at com.zorroa.archivist.sdk.client.Http.post(Http.java:39) 
~[archivist-sdk-0.17.0.jar:na]
        at 
com.zorroa.archivist.sdk.client.archivist.ArchivistClient.registerAnalyst(ArchivistClient.java:57)
 ~[archivist-sdk-0.17.0.jar:na]
        at 
com.zorroa.analyst.service.RegisterServiceImpl.runOneIteration(RegisterServiceImpl.java:45)
 ~[classes/:na]
        at 
com.google.common.util.concurrent.AbstractScheduledService$1$1.run(AbstractScheduledService.java:174)
 [guava-18.0.jar:na]
        at com.google.common.util.concurrent.Callables$3.run(Callables.java:95) 
[guava-18.0.jar:na]
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
[na:1.8.0_65]
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
[na:1.8.0_65]
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
 [na:1.8.0_65]
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
 [na:1.8.0_65]
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[na:1.8.0_65]
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[na:1.8.0_65]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_65]
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

I’ve basically tried 1000 different combinations of HttpClient setup and 
versions, but this is how I’m setting it up currently:

this.client = HttpClients.custom()
        .setConnectionManager(new PoolingHttpClientConnectionManager())
        .setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
                .loadTrustMaterial(null, new TrustSelfSignedStrategy())
                .build()))
        .setSSLHostnameVerifier(new NoopHostnameVerifier())
        .build();

Any help would be greatly appreciated.  

-Matt

Reply via email to