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

在HtmlUnit库中打开SSL web浏览器连接,ssl,certificate,htmlunit,Ssl,Certificate,Htmlunit,关于这个问题,我已经在网上搜索了几个小时,我发现没有一个答案与我的问题不符,所以这是我在SOF中提出的第一个问题 因此,我试图使用htmlunit库从java程序打开web浏览器。我需要连接的网站需要SSL连接,证书存储在USB密钥中。它的iKey2023产品 该系统以前可以工作(我没有写),但USB密钥中的一个证书过期了,因此它自动转到下一个证书(总共有4个证书),然后它突然停止工作 它给了我javax.net.ssl.SSLPeerUnverifiedException:对等未验证错误 我现

关于这个问题,我已经在网上搜索了几个小时,我发现没有一个答案与我的问题不符,所以这是我在SOF中提出的第一个问题

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

该系统以前可以工作(我没有写),但USB密钥中的一个证书过期了,因此它自动转到下一个证书(总共有4个证书),然后它突然停止工作

它给了我javax.net.ssl.SSLPeerUnverifiedException:对等未验证错误

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

  • 浏览器实例是使用IE8创建的

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

  • 通过将URL作为参数传递,建立与网站的连接

  • 它在第3步抛出异常

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

    是这样的

    Provider p=new sun.security.pkcs11.SunPKCS11(configFileInputStream); 安全性。addProvider(p)

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

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

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

    这是我试过的

  • 我尝试在htmlunit库中使用不同的方法,比如setSecurityProvider,并尝试将在上述代码片段中创建的Provider对象放入其中。我得到了班上的演员名单

  • webClient.setUseInsecureSSL(true);
    
  • 我试图手动设置系统属性(信任库、信任库密码、密钥库等)。为了做到这一点,我想从USB密钥中导出证书,但它不允许我从中导出私钥,因此我无法从中创建有效的PKCS12文件(openSSL需要私钥文件和.pem文件进行转换,而我没有该密钥文件)


  • 它们不起作用了,我现在被卡住了。

    我也有类似的问题。在我的例子中,一位管理员更改了证书,我开始遇到相同的SSLPeerUnverifiedException

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

    webClient.setUseInsecureSSL(true);
    
    但是,这并不能解决问题,因为服务器基本上不验证客户端


    这就好像WebClient正在存储与新证书不兼容的内容。

    @从2.11起已弃用,请改用{@link#getOptions()}.setUseSecureSSL。