ssl - 在 HtmlUnit 库中打开 SSL 网络浏览器连接

标签 ssl certificate htmlunit

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

因此,我尝试使用 htmlunit 库从 java 程序打开网络浏览器。我需要连接的网站需要 SSL 连接,证书存储在 USB key 中。其iKey2023产品。

原来系统可以用(我没写),但是U盘里有一个证书过期了,所以自动跳到下一个(一共4个证书),突然就不行了.

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

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

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

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

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

它在第 3 步抛出异常。

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

原来是这样的。

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

并从该提供商创建一个 keystore 。

使用这个 keystore ,在 WebConnection 实现中,它创建了一个 SSLSocket。

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

这是我尝试过的。

  1. 我已经尝试在 htmlunit 库中使用不同的方法,例如 setSecurityProvider,并且我尝试将在上面的代码片段中创建的 Provider 对象放入其中。我遇到了类转换异常。

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

它们没有用,我现在被困住了。

最佳答案

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

我发现我可以将 WebClient 设置为使用不安全的 SSL(在调用 getPage() 之前)并且我将不再得到异常。

webClient.setUseInsecureSSL(true);

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

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

关于ssl - 在 HtmlUnit 库中打开 SSL 网络浏览器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6702037/

相关文章:

java - "Run"HTMLUnit 与 PHP

java - 目标服务器无法响应 htmlunit 和 tor 异常

java - HtmlUnit网页状态码

ssl - 可以在 nginx 入口 Controller 中使用动态路由吗?

spring - ApacheConnectorProvider 与 Jersey for SSL 抛出错误

amazon-web-services - 从 API Gateway 客户端证书中检索 PEM 编码的私钥

c# - 创建 X509Certificate2 时阻止创建文件?

php - 如何在 PHP 中使用 CURL 获取 SSL 证书信息?

internet-explorer - 有没有办法检查是否启用了 TLS?

certificate - 1 类和 3 类根以及它们签署的证书有什么区别?