Hello Everyone!
I spent a large part of yesterday and this morning trying to debug an SSL
problem on Tomcat 8.5.57 to no avail. I've seen some discussion on either this
problem or something related back in 2016, but wanted to confirm what the
"correct" solution might be, because I got lost in the threads.
I never had this problem with Tomcat 7.0.x, but it started once I upgraded to
8.5.57 (same application code), and it is related to making outgoing SSL
connections to web services. And this is NOT related to a self-signed, but to
a commercial (GoDaddy) SSL certificate, albeit on a server that I also run in
the cloud.
The exception is being thrown when trying to connect to an SSL protected web
service is:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
although the exact same code worked (and still works on other servers) reliably
under Tomcat 7.0.x for several years.
Now, here is the weird part: after Google'ing around, I thought the problem
might be that Tomcat 8.5.5 and later -- at least this is the gist that I got --
no longer finds the 'default' Java certificate store (cacerts), so I added the
following to /bin/catalina.sh (running on a Mac 10.14 / Mojave):
export
-Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/security/cacerts
The weird part is that this appeared to fix the problem, so I thought I was
done. Then, I rebooted, and the problem re-appeared!
I stopped and started Tomcat, and the problem was resolved again. I rebooted
again, and the problem re-appeared.
Previously, when it worked, I refreshed the page several times, and it kept
working. When it doesn't work, if I keep refreshing the page, it continues to
throw the exception.
Does this mean that some "worker threads" can find the certificate store, and
others can't? Or am I going down the wrong rabbit hole?
So, any idea? The intermittent nature is driving me crazy!
And I have can reproduce the problem on two separate servers (both Mac 10.14 /
Mojave, both Java 1.8.0), one (new server) running 8.5.57 and one (slightly
older server) running 8.5.35. But again, I have several 7.0.x instances where
I've never seen this problem before.
Also, the generic 'SSLPoke' always connects to the service, and it appears that
if I run (mostly) the same code from the command line outside of Tomcat (javac
/ java) it always works. And if I paste the web service URL into Safari or
Chrome, it always works. And if I use the web service URL with curl (just for
good measure), it always works. So it only seems to fall under Tomcat 8.5.x.
Thanks in advance for any guidance, as I'm running out of things to Google and
try.
Regards,
Dave.