2012-04-13 31 views
2

私はHtmlUnit(Javaライブラリ)を使用してWebサイトにログインしようとしていますが、無視してもいいと思う例外があります。例外は「javax.net.ssl.SSLPeerUnverifiedException:ピアが認証されていません」です。私はこれを証明書のサポート "www.thesite.com"に限定しましたが、 "somedomain.thesite.com"を使用します。私が信じているエラーは、証明書がいくつかのjavascript関数で使用する他のサブドメインの名前を付けないためです。手でFirefoxを使用したときと同じように、私はこれらの例外を見ることができないので、何か他のことが起こっていると思うように思えるのです。あなたが見ることができるように、私が有効になっている「SSLPeerUnverifiedException:ピアが認証されていません」という例外が発生しましたが、どのように回避/無視できますか?

// <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(); 

}

'(真)webClient.setUseInsecureSSLを;':以下

は、私が使用していたコードですHtmlUnitライブラリにあります。私はこれがそれを行うべきであると思う。しかし、この時点で私は立ち往生しています。ここで

は、私が取得しています例外エラーです:

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) 

任意のアイデア、または提案ですか?プログラムは単にこのエラーの後に続かない、証明書が悪い(それは有効な証明書で、別のサブドメインを使用するだけである)場合でも気にしない。

+0

これらの[手順](http://www.julespotvin.com/?p=76)に従ってください。 –

答えて

0

問題は、そのサブドメインに有効な証明書が必要なことです。それを入手して、使用しているJavaのバージョンのjssecacertsに追加してください。

私はInstallCert.javaを使ってこれを行いました。便利なドキュメントがあります:http://miteff.com/install-cert、おそらくここには:http://pinchii.com/home/tag/jssecacerts/

"InstallCert.java"という単純なgoogle検索では、たくさんの結果が得られます。

Good Luck!

関連する問題