【问题标题】:Opening an SSL web-browser connection in HtmlUnit library在 HtmlUnit 库中打开 SSL Web 浏览器连接
【发布时间】:2011-10-05 19:59:57
【问题描述】:

我在网上搜索了几个小时关于这个问题,但我找到的答案都没有真正适合我的问题,所以这是我,问我在 SOF 中的第一个问题。

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

系统以前可以工作(我没写),但是U盘里的一个证书过期了,所以自动转到下一个(一共4个证书),突然不工作了.

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

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

  1. 浏览器实例已创建,使用 IE8

  2. browser.setWebConnection 方法被调用。根据 API,此方法是一个内部 API。

  3. 通过将 URL 作为参数传递来连接到网站

它在第 3 步抛出异常。

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

原来是这样的。

提供者 p = new sun.security.pkcs11.SunPKCS11(configFileInputStream); 安全性.addProvider(p);

并从此提供者创建一个密钥库。

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

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

这是我尝试过的。

  1. 我尝试在 htmlunit 库中使用不同的方法,例如 setSecurityProvider,并尝试将在上面的代码 sn-p 中创建的 Provider 对象。我遇到了类转换异常。

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

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

【问题讨论】:

    标签: ssl certificate htmlunit


    【解决方案1】:

    我也有类似的问题。就我而言,管理员更改了证书,我开始遇到相同的 SSLPeerUnverifiedException。

    我发现我可以将 WebClient 设置为使用 insecureSSL(在调用 getPage() 之前)并且我将不再收到异常。

    webClient.setUseInsecureSSL(true);
    

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

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

    【讨论】:

    • @deprecated as of 2.11,请改用 {@link #getOptions()}.setUseInsecureSSL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2018-05-02
    • 2012-12-04
    相关资源
    最近更新 更多