我需要使用Java通过HTTPS连接到URL。我没有任何SSL证书的经验,这里的大多数问题都假设了一些基本知识。我希望有人能让我开始学习基础知识。
当我将URL放入浏览器时,它连接得很好。当我使用Java时:
new URL("https://mysite.com/").openStream()
它抛出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
This question显示了如何忽略整个证书的事情,但这感觉不对。我只是想使用我的浏览器所使用的相同证书。
我已经尝试添加-Djavax.net.ssl.trustStore=cacerts
属性,这会将异常更改为javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
,我从this question获取该属性意味着它无法找到名为的信任库cacerts
。我不知道还有什么要指明的。
答案 0 :(得分:1)
许多网站都为ssl使用自签名证书。您应该将它们添加到JRE的cacerts
文件中。在这种情况下,我使用以下步骤:
https://mysite.com
keytool -import -alias mysite -file mysite.cer -keystore {path/to/cacerts}
作为替代方案,您可以使用openssl s_client
实用程序来检索mysite.com
证书。