tomcat服务器上的javax.net.ssl.SSLHandshakeException

tomcat服务器上的javax.net.ssl.SSLHandshakeException,java,jakarta-ee,tomcat,ssl,https,Java,Jakarta Ee,Tomcat,Ssl,Https,我想用https协议获取url的内容。问题是,当从tomcat服务器执行此代码时,我得到一个握手异常 url = new URL("https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Nivo/nivo.20140309.csv"); Scanner s = new Scanner(url.openStream()); 我试图研究其他stackoverflow问题(or),似乎我需要定义一个密钥库 我不知道怎么做 tom

我想用https协议获取url的内容。问题是,当从tomcat服务器执行此代码时,我得到一个握手异常

url = new URL("https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Nivo/nivo.20140309.csv");    
Scanner s = new Scanner(url.openStream());
我试图研究其他stackoverflow问题(or),似乎我需要定义一个
密钥库

我不知道怎么做

tomcat服务器中的完整错误为

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: Path does not chain with any of the trust anchors

实现这一点的最佳方法是什么?

默认的java信任库($java_HOME/lib/security/cacerts)包含donneespubliques.meteofrance.fr的CA证书。很可能tomcat使用的是另一个

您应该能够通过更新tomcat启动脚本以包含castore位置来强制它。大概是这样的:

-Djavax.net.ssl.trustStore="C:\Program Files\Java\jre7\lib\security\cacerts" 
-Djavax.net.ssl.trustStorePassword=changeit 

该证书不是自签名的。这是委托人签字的。您可以将委托CA导入现有的java密钥库。GoogleJavaKeyTool,或者在命令行上键入“keytool-importcert-help”以获得答案。我试图创建一个keystore
keytool-genkey-alias tomcat-keyalg RSA
,但它在控制台中不断循环,询问我的姓名、城市、国家等。使用tomcat访问https url总是那么困难吗?Java附带了一个keystore,您可以使用它。你不需要做一个新的。您不应该生成任何密钥。您必须下载委托证书并导入它。好的。我想你可以忘记导入CA证书了。我刚检查过,它已经在java CA根存储中了。您可能正在与tomcat重写默认密钥库进行斗争。您的应用程序是否在任何地方重写其默认的truststore或trustmanager?可能在catalina.sh(或.bat)中使用
-Djavax.net.trustStore=…
或代码中的某个地方?