首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >收到异常"SSLPeerUnverifiedException: peer not authenticated",如何避免/忽略它?

收到异常"SSLPeerUnverifiedException: peer not authenticated",如何避免/忽略它?
EN

Stack Overflow用户
提问于 2012-04-13 22:51:28
回答 1查看 3.1K关注 0票数 2

我正在尝试使用HtmlUnit (Java Library)登录一个网站,但得到了一个异常,我觉得我可以忽略它。例外是"javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated“。我已经将范围缩小到证书支持"www.thesite.com",但是它使用了"somedomain.thesite.com“。我认为这个错误是由于证书没有命名它在某些javascript函数中使用的其他子域。这非常奇怪,因为当我手动使用Firefox时,我没有看到这些异常,这让我认为还有其他事情发生。

下面是我使用的代码:

代码语言:javascript
复制
// <editor-fold desc="User Credentials and site.">
String user = "auser";
String password = "apassword";

String mainUrl = "https://www.awebsite.com/";

// Setup Ajax & Cookies
AjaxController ajaxController = new AjaxController();
CookieManager cookieManager = new CookieManager();
cookieManager.setCookiesEnabled(true);

// Setup WebClient
WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3_6);
webClient.setAppletEnabled(true);
webClient.setCssEnabled(true);
webClient.setJavaScriptEnabled(true);
webClient.setAjaxController(ajaxController);
webClient.setThrowExceptionOnScriptError(false);
webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setCookieManager(cookieManager);

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

//webClient.set
HtmlPage page = null;

try {
    webClient.setUseInsecureSSL(true);
    page = webClient.getPage(mainUrl);

    // fill in form
    HtmlForm htmlForm = page.getFormByName("thisForm");
    HtmlInput userField = htmlForm.getInputByName("Username");
    HtmlInput passwordField = htmlForm.getInputByName("Password");

    // Enter login and password
    userField.setValueAttribute(user);
    passwordField.setValueAttribute(password);

    //HtmlPage mainMenuPage = htmlForm.click();
    HtmlElement element = htmlForm.getInputByValue("Login");

    page = element.click();
    webClient.waitForBackgroundJavaScript(5000); // pause if

    System.err.println(page.asText());
    System.err.println(page.asXml());

} catch (Exception ex) {
    ex.printStackTrace();
}

webClient.closeAllWindows();

}

如您所见,我已经在HtmlUnit库中启用了'webClient.setUseInsecureSSL(true);‘。我想这个应该可以了。然而,在这一点上我被卡住了。

下面是我得到的异常错误:

代码语言:javascript
复制
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
    at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:307)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)
    at com.mycompany.extract.Program.main(Program.java:62)

有什么想法或建议吗?这个错误之后程序就不能继续运行了,我并不关心证书是否坏了(它是一个有效的证书,只是使用了一个不同的子域),证书也不在我的控制范围之内。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-18 07:58:50

问题是您需要该子域的有效证书。获取它,并将其添加到您正在使用的Java版本中的jssecacerts中。

我使用InstallCert.java做到了这一点。这里有一些有用的文档:http://miteff.com/install-cert,也可能在这里:http://pinchii.com/home/tag/jssecacerts/

一个简单的谷歌搜索"InstallCert.java“应该会给你很多的结果。

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10143111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档