2011-07-15 46 views
4

我在这个问题上搜索了几个小时,并且没有发现我的答案并不真正适合我的问题,所以这里是我,有史以来在SOF的问题。在HtmlUnit库中打开一个SSL网页浏览器连接

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

该系统曾经工作过(我没有写过),但其中一个USB密钥中的证书过期了,所以它自动移动到下一个(共有4个证书),并且它突然停止加工。

它给我javax.net.ssl.SSLPeerUnverifiedException:对方未经过身份验证的错误。

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

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

  2. browser.setWebConnection方法被调用。根据API,这种方法是一个内部API。通过将URL作为参数

它抛出异常,在步骤3

更多的细节

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

    它就是这样。

    Provider p = new sun.security.pkcs11.SunPKCS11(configFileInputStream); Security.addProvider(p);

    并从该提供者创建密钥库。

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

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

    这是我试过的。

    1. 我试图使用化的HtmlUnit库不同的方法,像setSecurityProvider,我试图把在上面的代码片断创建的Provider对象。我有类演员异常。

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

    他们没有工作,我现在很困难。任何帮助/提示将不胜感激。如果你需要更多的细节,我可以提供他们明天,但我想我已经在这里给了足够的细节。

    在此先感谢。

  • 回答

    5

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

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

    webClient.setUseInsecureSSL(true); 
    

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

    它就好像WebClient存储的东西不能与新证书一起使用。

    +4

    @deprecated从2.11开始,请使用{@link #getOptions()}。setUseInsecureSSL代替。 – alfonx

    相关问题