我想可以使用HtmlUnit,登錄到使用HTTPS連接的網站,我得到一個錯誤的語句無法使用使用的HtmlUnit網站連接HTTPS
page = webClient.getPage(url);
唯一的例外是
引起error:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target`
我迄今所做的:
導出個人證書的網站」使用的證書鏈Firefox和使用Java keytool它們導入了JVM的默認密鑰庫,例如:
keytool -import -trustcacerts -alias root -file C:\Users\myUser\Desktop\Certificates\VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt -keystore C:\Program Files (x86)\Java\jre1.8.0_91\lib\security\cacerts
使用Java keytool開始了新的密鑰庫,並僅進口相關的根,中間和特定網站證書。
設置使用
System.setProperty("javax.net.ssl.trustStore", "C:/Users/Henry/workspace/AutoEtime/cacerts");
- 試圖改變瀏覽器版本Chrome瀏覽器,然後到Firefox
- 儘量選用SSLPoke.class從confluence.atlassian.com測試如果此證書作爲Java證書存儲證書是正確的,但我不知道要連接的端口,並使用默認的433給出一個
我還沒有嘗試過使用任何其他方法大綱d在WebClientOptions
文檔中發現here,因爲我不知道如何使用它們來獲得我想要的效果。
一,我在網上看到的最常見的答案是使用webClient.setUseInsecureSSL(true);
這測試我的應用程序正常工作的建議,但是我需要有連接使用SSL由於靈敏度的固定用戶名和密碼,我用來連接到網站。
我想補充的一件有趣的事情是,實際上每5-10次嘗試中就有一次嘗試,並且不會拋出SSLHandshakeException,即使我沒有在代碼中進行任何更改。
我該如何解決這個問題?另外,它爲什麼每隔一段時間就會工作?
HTTPS的默認端口是443而不是433.在Windows下手動更改/寫入文件在'\ Program Files'或'\ Program Files(x86)'上是一個壞主意;對於新版Windows版本,這些更改可能不起作用,或者有時可能會起作用,這可能會解釋您的間歇性行爲。要麼在別處安裝Java(我喜歡'c:\ Java')或者使用第二個項目符號:創建您自己的密鑰存儲並指向它;如果服務器行爲正確,則只需要root證書即可,並且確保在JVM進程中首次使用SSL之前設置'trustStore'(AND'trustStorePassword',如果不是'changeit')。 –
是否有可能提供您嘗試使用的主機名? –
你是對的Dave,我在運行SSLPoke.class時在我的問題和參數中輸入了錯誤的端口。只要我改變它並添加證書,它就成功連接了。 –