2011-07-15 44 views
4

我在這個問題上搜索了幾個小時,並且沒有發現我的答案並不真正適合我的問題,所以這裏是我,有史以來在SOF的問題。在HtmlUnit庫中打開一個SSL網頁瀏覽器連接

所以,我試圖從一個java程序使用htmlunit庫打開一個web瀏覽器。我需要連接的網站需要SSL連接,並且證書存儲在USB密鑰中。其iKey2023產品。

該系統曾經工作過(我沒有寫過),但其中一個USB密鑰中的證書過期了,所以它自動移動到下一個(共有4個證書),並且它突然停止加工。

它給我javax.net.ssl.SSLPeerUnverifiedException:對方未經過身份驗證的錯誤。

我現在回家了,我忘記了方法的確切名稱,但我記得以下內容。

  1. 瀏覽器實例被創建,使用IE8

  2. browser.setWebConnection方法被調用。根據API,這種方法是一個內部API。通過將URL作爲參數

它拋出異常,在步驟3

更多的細節

  • 進行連接到該網站。小細節可能不正確,但我想描述一幅大圖。 在步驟2中,該方法要求WebConnection對象作爲參數,並且有該接口的實現。在這個實現中,使用sun.security.pkcs11.SunPKCS11(configFileInputStream)創建了一個密鑰庫(我拼寫正確嗎?)

    它就是這樣。

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

    並從該提供者創建密鑰庫。

    使用此密鑰庫,在WebConnection實現中,它創建一個SSLSocket。

    因此,證書切換到新證書後,證書沒有正確提取證書。

    這是我試過的。

    1. 我試圖使用化的HtmlUnit庫不同的方法,像setSecurityProvider,我試圖把在上面的代碼片斷創建的Provider對象。我有類演員異常。

    2. 我試着手動設置系統屬性(trustStore,trustStorePassword,keyStore等)。爲了做到這一點,我想從USB密鑰中導出證書,但是它不允許我將私鑰從其中導出,所以我無法真正創建一個有效的PKCS12文件(openSSL需要一個私鑰密鑰文件以及.pem文件進行轉換,並且我沒有該密鑰文件)。

    他們沒有工作,我現在很困難。任何幫助/提示將不勝感激。如果你需要更多的細節,我可以提供他們明天,但我想我已經在這裏給了足夠的細節。

    在此先感謝。

  • 回答

    5

    我有類似的問題。在我的情況下,管理員更改了證書,我開始遇到相同的SSLPeerUnverifiedException。

    我發現我可以設置WebClient使用insecureSSL(在調用getPage()之前),我不會再得到異常。

    webClient.setUseInsecureSSL(true); 
    

    但是,這並不能解決問題,因爲服務器基本上不驗證客戶端。

    它就好像WebClient存儲的東西不能與新證書一起使用。

    +4

    @deprecated從2.11開始,請使用{@link #getOptions()}。setUseInsecureSSL代替。 – alfonx

    相關問題