通过SSL与Java连接:基础知识

时间:2014-01-31 10:36:56

标签: java ssl

我需要使用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。我不知道还有什么要指明的。

1 个答案:

答案 0 :(得分:1)

许多网站都为ssl使用自签名证书。您应该将它们添加到JRE的cacerts文件中。在这种情况下,我使用以下步骤:

  1. 使用浏览器转到https://mysite.com
  2. 将其证书保存到本地计算机
  3. 使用keytool命令将其导入cacerts。命令行如下所示:keytool -import -alias mysite -file mysite.cer -keystore {path/to/cacerts}
  4. 作为替代方案,您可以使用openssl s_client实用程序来检索mysite.com证书。