gpt4 book ai didi

java - 在 Java 的 HTMLUnit 中使用非标准接口(interface)时 SSL 验证失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:05 25 4
gpt4 key购买 nike

作为前言,这是我的第一个 Java 程序,对于我可能犯下的任何格式化暴行,我深表歉意。我在我的单元测试程序中遇到了障碍。我无法使用默认接口(interface),所以我将请求设置为在不同的本地地址上发出。但是,当我这样做时,SSL 不再有效。这是我在执行程序时收到的回溯。我正在寻找某种方法在非默认接口(interface)(在我的例子中是 eth1)上发出请求并让 SSL 工作。

Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:371)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:572)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:180)
at org.apache.http.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:640)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:479)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:172)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1460)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1379)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:311)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:380)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:365)
at UnitTest.main(UnitTest.java:65)

--

public class UnitTest {

public static void main(String[] args) throws Exception {
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_10);
webClient.setWebConnection(new HttpWebConnection(webClient) {
@Override
protected AbstractHttpClient createHttpClient() {
AbstractHttpClient client = super.createHttpClient();
try {
HttpParams params = client.getParams();
params.setParameter(ConnRoutePNames.LOCAL_ADDRESS, InetAddress.getByName("XXX.XXX.XXX.XXX"));
client.setParams(params);
}
catch(Exception e) {
e.printStackTrace();
}
return client;
}
});
webClient.setThrowExceptionOnScriptError(false);
webClient.setJavaScriptEnabled(false);
webClient.getCookieManager().setCookiesEnabled(true);

HtmlPage page = (HtmlPage)
webClient.getPage("https://someencryptedpage.com");

最佳答案

这是由不信任此证书的 java keystore 引起的。

最快的解决方案是将 Web 客户端设置为忽略 SSL 异常:

对于 2.11 之前的 HtmlUnit 版本:

webClient.setUseInsecureSSL(true); 

对于 HtmlUnit 2.11 及更新版本:

webClient.getOptions().setUseInsecureSSL(true);

这是 HtmlUnit javadoc :

如果由于某些原因你想管理证书而不是忽略它的状态,你可以将它导入你的 keystore ,但这可能需要维护,例如如果证书被更改/更新:将证书添加到 keystore .这里有一些pointers

关于java - 在 Java 的 HTMLUnit 中使用非标准接口(interface)时 SSL 验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13532913/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com