我希望使用 https 协议获取网址的内容。问题是,当从 tomcat服务器执行此代码时,我得到 HandshakeException 。
url = new URL("https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Nivo/nivo.20140309.csv");
Scanner s = new Scanner(url.openStream());
我尝试查看其他stackoverflow问题(How can I use different certificates on specific connections?或SSL Socket connection),似乎我需要定义KeyStore
。
我不知道该怎么做。
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
最好的方法是什么?
答案 0 :(得分:0)
默认的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