首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用Htmlunit连接到使用HTTPS的网站

无法使用Htmlunit连接到使用HTTPS的网站
EN

Stack Overflow用户
提问于 2017-02-23 00:03:24
回答 1查看 1.1K关注 0票数 0

我试图使用HtmlUnit登录到一个使用HTTPS连接的网站,并得到由该语句引起的错误。

代码语言:javascript
复制
page = webClient.getPage(url);

例外是

代码语言:javascript
复制
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密钥工具将它们导入JVM的默认密钥存储库,例如: 键工具-import -trustcacerts -alias root -file -file -keystore C:\Program (x86)\Java\jre1.8.0_91\lib\security\cacerts
  • 使用java密钥工具启动一个新的密钥存储库,并只导入相关的根、中间和特定网站的证书。
  • 将此证书设置为java证书存储区。 System.setProperty("javax.net.ssl.trustStore","C:/Users/Henry/workspace/AutoEtime/cacerts");
  • 尝试将浏览器版本更改为Chrome,然后更改为Firefox
  • 尝试使用SSLPoke.class from confluence.atlassian.com测试证书是否正确,但是我不知道要连接到哪个端口,并且使用默认的433给出了一个ConnectException: Connection timed out

我没有尝试使用WebClientOptions文档中概述的任何其他方法,因为我不知道如何使用它们来获得我想要的效果。

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

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

我想补充的一件有趣的事情是,每5-10次尝试中就有一次能够运行,并且不会抛出SSLHandshakeException,尽管我在代码中没有做任何更改。

我该如何解决这个问题?另外,为什么它每隔一段时间就会起作用呢?

EN

回答 1

Stack Overflow用户

发布于 2017-02-23 23:37:29

好吧,所以我想出了办法,只要尝试不同的事情。事实证明,我需要以.der形式而不是.crt格式导入证书。默认的keystore已经拥有正确的根证书,但缺少的是中间证书和叶证书的某种组合。在导入intermediate.der和leaf.der并指定我的仙人掌文件副本在哪里之后,SSLHandshakeException就没有再次发生了。希望这实际上已经解决了,而且这个例外已经永远消失了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42404654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档