我正在尝试使用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");
ConnectException: Connection timed out
我没有尝试使用WebClientOptions
文档[{3}}中列出的任何其他方法,因为我不确定如何使用它们来获得我想要的效果。
我在网上看到的最常见的答案之一是建议使用webClient.setUseInsecureSSL(true);
这适用于测试我的应用程序,但我需要使用SSL保护连接,因为我用来连接到网站的用户名和密码的敏感性。
我想要添加的一件有趣的事情是每5-10次尝试中有一次实际工作,并且不会抛出SSLHandshakeException,即使我在代码中没有更改任何内容。
如何解决此问题?另外,为什么它偶尔会起作用?