Ich versuche mich mit HtmlUnit (Java Library) an einer Website anzumelden und erhalte eine Ausnahme, die ich einfach ignorieren könnte. Die Ausnahme ist "javax.net.ssl.SSLPeerUnverifiedException: Peer nicht authentifiziert". Ich habe dies auf das Zertifikat unterstützt unterstützt "www.thesite.com", aber es verwendet "Somedomain.thesite.com". Der Fehler liegt meines Erachtens daran, dass das Zertifikat die andere Subdomäne, die es in einigen JavaScript-Funktionen verwendet, nicht benennt. Es ist sehr merkwürdig, wenn ich Firefox von Hand benutze, sehe ich diese Ausnahmen nicht, was mich denken lässt, dass etwas anderes passiert.Erhalte eine Ausnahme "SSLPeerUnverifiedException: Peer nicht authentifiziert", wie kann ich es vermeiden/ignorieren?
Unten ist der Code ich verwende:
// <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();
}
Wie Sie sehen können, habe ich enabled 'webClient.setUseInsecureSSL (true);' in der HtmlUnit-Bibliothek. Ich denke, das sollte es tun. An dieser Stelle stehe ich jedoch fest.
Hier wird die Ausnahmefehler Ich erhalte:
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)
Irgendwelche Ideen oder Anregungen? Das Programm läuft nach diesem Fehler einfach nicht weiter. Es ist mir egal, ob das Zertifikat schlecht ist (es ist ein gültiges Zertifikat, es wird nur eine andere Subdomain verwendet), das Zertifikat liegt außerhalb meiner Kontrolle.
Versuchen Sie, diese [Schritte] (http://www.julespotvin.com/?p=76) zu folgen. –