在HtmlUnit库中打开SSL Web浏览器连接

时间:2011-07-15 02:19:13

标签: ssl certificate htmlunit

我在这个问题上通过网络搜索了几个小时,我找到的答案都没有真正适合我的问题,所以这就是我,在SOF中提出我的第一个问题。

所以,我正在尝试使用htmlunit库从java程序打开Web浏览器。我需要连接的网站需要SSL连接,证书存储在USB密钥中。它的iKey2023产品。

系统曾经工作过(我没写过),但是USB密钥中的一个证书已过期,所以它自动转移到下一个(共有4个证书),它突然停止工作

它给了我javax.net.ssl.SSLPeerUnverifiedException:peer not authenticated error。

我现在回到家了,我忘记了方法的确切名称,但我记得以下内容。

  1. 使用IE8

  2. 创建浏览器实例
  3. 调用了browser.setWebConnection方法。根据API,此方法是内部API。

  4. 通过传递URL作为参数

  5. 建立与网站的连接

    它在第3步抛出异常。

    更多细节。小细节可能不正确,但我试图描述一幅大图。 在步骤2,该方法将WebConnection对象作为参数,并且存在该接口的实现。在此实现中,使用sun.security.pkcs11.SunPKCS11(configFileInputStream)创建密钥库(我拼写正确吗?)

    就像这样。

    提供者p = new sun.security.pkcs11.SunPKCS11(configFileInputStream); Security.addProvider(P);

    从此提供程序创建密钥库。

    在WebConnection实现中使用此密钥库,它会创建一个SSLSocket。

    因此,在证书切换到新证书后,它没有正确获取证书。

    这是我尝试过的。

    1. 我尝试在htmlunit库中使用不同的方法,比如setSecurityProvider,我尝试将Provider对象放在上面的代码片段中。我有阶级演员例外。

    2. 我尝试手动设置系统属性(trustStore,trustStorePassword,keyStore等)。为了做到这一点,我想从USB密钥导出证书,但它不允许我从中导出私钥,所以我无法真正创建一个有效的PKCS12文件(openSSL想要私有)密钥文件和.pem文件进行转换,我没有那个密钥文件。)

    3. 他们没有工作,我现在很困难。

1 个答案:

答案 0 :(得分:5)

我有类似的问题。在我的情况下,管理员更改了证书,我开始遇到相同的SSLPeerUnverifiedException。

我发现我可以将WebClient设置为使用insecureSSL(在调用getPage()之前),我将不再获得异常。

webClient.setUseInsecureSSL(true);

然而,这并不能解决问题,因为服务器基本上不对客户端进行身份验证。

就好像WebClient存储的内容不适用于新证书。