2012-04-13 9 views
2

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.

+0

Versuchen Sie, diese [Schritte] (http://www.julespotvin.com/?p=76) zu folgen. –

Antwort

0

Das Problem ist, dass Sie das gültige Zertifikat für diese Subdomäne benötigen. Holen Sie es und fügen Sie es zu Ihrer jssecacerts in der Java-Version, die Sie verwenden, hinzu.

Ich habe dies mit InstallCert.java getan. Es gibt einige hilfreiche Dokumentation hier: http://miteff.com/install-cert und möglicherweise hier: http://pinchii.com/home/tag/jssecacerts/

Eine einfache Google-Suche nach "InstallCert.java" sollte Ihnen viele Ergebnisse geben.

Viel Glück!

Verwandte Themen