我在这个问题上搜索了几个小时,并且没有发现我的答案并不真正适合我的问题,所以这里是我,有史以来在SOF的问题。在HtmlUnit库中打开一个SSL网页浏览器连接
所以,我试图从一个java程序使用htmlunit库打开一个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); Security.addProvider(p);
并从该提供者创建密钥库。
使用此密钥库,在WebConnection实现中,它创建一个SSLSocket。
因此,证书切换到新证书后,证书没有正确提取证书。
这是我试过的。
我试图使用化的HtmlUnit库不同的方法,像setSecurityProvider,我试图把在上面的代码片断创建的Provider对象。我有类演员异常。
我试着手动设置系统属性(trustStore,trustStorePassword,keyStore等)。为了做到这一点,我想从USB密钥中导出证书,但是它不允许我将私钥从其中导出,所以我无法真正创建一个有效的PKCS12文件(openSSL需要一个私钥密钥文件以及.pem文件进行转换,并且我没有该密钥文件)。
他们没有工作,我现在很困难。任何帮助/提示将不胜感激。如果你需要更多的细节,我可以提供他们明天,但我想我已经在这里给了足够的细节。
在此先感谢。
@deprecated从2.11开始,请使用{@link #getOptions()}。setUseInsecureSSL代替。 – alfonx