Hi David, when debugging SSL problems, it is important to know, which certs are the troublemakers. Are those errors reported when tomcat is used as a client as a server?
Try to get more information about the cert that is making problems. I always try to get the cert with an openssl command like </dev/null openssl s_client -connect <server>:<port> | openssl x509 -text It will print out a lot of information about the cert of the target you want to access (I assume, that you use tomcat as a client, that is your app code is the client). Problems with a cert could arise from an old hashing algorithm, a signing CA, that your trust store doesn't trust, a signature algorithm, ... If you want to debug yourself a bit further, you could switch on the debugging of certs/ssl stuff by setting the JVM system property javax.net.debug=all (or a bit less). As a tip, I would add properties via $CATALINA_BASE/bin/setenv.sh instead of editing catalina.sh. Cert problems depend on the trust store you are using and each JVM brings there own set of trusted ca certs, so be sure to have a look at the used JVMs. Which worked, which doesn't? Hope this will help you debugging the problem further. Felix Am 09.08.20 um 00:16 schrieb David Filip: > Well, it is not consistent ... sometimes when I stop and start it from the > command line it works, and other times it doesn't, but every time it is > getting the -Djavax.net <http://djavax.net/>.ssl.trustStore parameter ... > which I check by doing a: > > $ ps -aef | grep java | tr ' ' '\n' > > which lists each parameter on a separate line. So I wish it were that > simple, but it does not appear to be so. But specifically to answer your > question, I use this script to toggle tomcat on and off: > > # tomcat > # > # Start / Stop Tomcat Application Server > # > # - If tomcat is running, stop it > # - if tomcat is not running, start it > # > # 24-Apr-2010 - DEF, original coding > # > > found=`ps -aef | grep /Library/Tomcat/bin/bootstrap.jar | grep -v grep | wc > -l` > > if [ $found -eq 0 ] > then > echo Starting Tomcat Application Server ... > sudo launchctl load /Library/LaunchDaemons/org.apache.tomcat.plist > else > echo Stopping Tomcat Application Server ... > sudo launchctl unload /Library/LaunchDaemons/org.apache.tomcat.plist > fi > > And the org.apache.tomcat.plist contains: > > <?xml version="1.0" encoding="UTF-8"?> > <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" > "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> > <plist version="1.0"> > <dict> > <key>Label</key> > <string>org.apache.tomcat</string> > <key>RunAtLoad</key> > <true/> > <key>ProgramArguments</key> > <array> > <string>/Library/Tomcat/bin/catalina.sh</string> > <string>run</string> > </array> > <key>StandardOutPath</key> > <string>/tmp/Tomcat.log</string> > <key>UserName</key> > <string>tomcat</string> > </dict> > </plist> > > so it is using catalina.sh. But right now, I just ran this command: > > $ ps -aef | grep java | tr ' ' '\n' | grep -- '-D' > -Djava.util.logging.config.file=/Library/Tomcat/conf/logging.properties > -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager > -Dbis.home=/home/infodesk > -Dbis.download=/tmp > -Dinfodoc.home=/home/infodesk > -Dinfodoc.download=/tmp > -Djavax.net.ssl.trustStore=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/security/cacerts > -Djdk.tls.ephemeralDHKeySize=2048 > -Djava.protocol.handler.pkgs=org.apache.catalina.webresources > -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 > -Djava.endorsed.dirs=/Library/Tomcat/endorsed > -Dcatalina.base=/Library/Tomcat > -Dcatalina.home=/Library/Tomcat > -Djava.io.tmpdir=/Library/Tomcat/temp > > and that file exists: > > $ ls -l > /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/security/cacerts > -rw-rw-r-- 1 root wheel 115588 Dec 1 2019 > /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/jre/lib/security/cacerts > > but I am getting the error: > > sun.security.validator.ValidatorException: PKIX path building failed: > sun.security.provider.certpath.SunCertPathBuilderException: unable to find > valid certification path to requested target > > However, I may have previously misspoken, as I *thought* it was related to > Apache 8.5.x, because I saw it on the new server with 8.5.57 but not an older > server running 7.0.x, and when I upgraded the old 7.0.x server to 8.5.57 it > immediately began to exhibit the problem. So cause and effect, right? But I > just downgraded the old server back to 7.0.x, and I am still seeing the > problem! Ugh! > > So I tried running the same app on an 8.5.37 server running on AWS Linux 2 > (similar to CentOS 7), and it works fine there, even after stopping and > starting the Tomcat server 6 (!) times -- just because I don't trust anything > right now. > > My original thought -- which I did not previously share because I convinced > myself it was crazy -- was that I first noticed the problem after I applied > the latest macOS security patch. However, once I saw that the Tomcat 7.0.x > server with the same macOS security patch did not exhibit the problem, I > ASSUMED it was related to the Tomcat version ... but as I said, now that I > have downgraded that server back to 7.0.x, I am not still -- sometimes -- > seeing the problem. Ugh. > > So I am now taking the "new" server and restoring from a backup taken a week > ago -- before I applied the macOS security patch -- to see if that makes a > difference. > > Given all of that, I can assure you that I am not drinking -- at least not > while in front of a computer -- and I am not taking any drugs, and as far as > I know, I am not clinically insane. But I still can't explain all of the > inconsistencies I am seeing, and the one thing that I always hate most when > debugging a problem is lack of a consistent reproducibility. > >> On Aug 8, 2020, at 5:17 PM, calder <calder....@gmail.com> wrote: >> >> On Sat, Aug 8, 2020, 13:59 David Filip <dfi...@colornet.com >> <mailto:dfi...@colornet.com>> wrote: >> >>> 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. >>> >> >> >> When you "stopped and started Tomcat", how did restart it? At the command >> line using one of the Tomcat shell scripts? >> >> My thought is, "whatever" fires up Tomcat after an iOS system reboot - that >> startup process does not call catalina.sh. >> >> But when you start Tomcat manually, using catalina.sh or startup.sh (which >> calls catalina.sh), it works because the Java option is being set. >> >> >> >> 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. > --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org For additional commands, e-mail: users-h...@tomcat.apache.org