无法使用HTTPS将Htmlunit连接到网站

时间:2017-02-23 00:03:25

标签: java ssl https htmlunit sslhandshakeexception

我正在尝试使用HtmlUnit登录使用HTTPS连接的网站,我收到由语句引起的错误

page = webClient.getPage(url);

例外是

error: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`

到目前为止我做了什么:

  • 使用Firefox导出网站证书链中的各个证书,并使用java keytool将其导入JVM的默认密钥库,例如:

    keytool -import -trustcacerts -alias root -file C:\Users\myUser\Desktop\Certificates\VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt -keystore C:\Program Files (x86)\Java\jre1.8.0_91\lib\security\cacerts
    
  • 使用java keytool启动新的密钥库,并仅导入相关的根,中间和特定网站的证书。

  • 使用

    将此证书设置为java证书存储区
     System.setProperty("javax.net.ssl.trustStore", "C:/Users/Henry/workspace/AutoEtime/cacerts");
    
  • 尝试将浏览器版本更改为Chrome,然后更改为Firefox
  • 尝试使用confluence.atlassian.com中的SSLPoke.class来测试证书是否正确,但我不知道要连接的端口,并使用默认的433给出ConnectException: Connection timed out

我没有尝试使用WebClientOptions文档[{3}}中列出的任何其他方法,因为我不确定如何使用它们来获得我想要的效果。

我在网上看到的最常见的答案之一是建议使用webClient.setUseInsecureSSL(true);

这适用于测试我的应用程序,但我需要使用SSL保护连接,因为我用来连接到网站的用户名和密码的敏感性。

我想要添加的一件有趣的事情是每5-10次尝试中有一次实际工作,并且不会抛出SSLHandshakeException,即使我在代码中没有更改任何内容。

如何解决此问题?另外,为什么它偶尔会起作用?

0 个答案:

没有答案