我需要使用Java通過HTTPS連接到URL。我沒有任何SSL證書的使用經驗,這裏的大部分問題都假設了一些基本的知識。我希望這裏有人可以讓我開始基礎。通過SSL與Java連接:基礎知識
當我把URL放入瀏覽器時,它連接的很好。當我使用Java它:
new URL("https://mysite.com/").openStream()
它拋出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
This question顯示瞭如何忽略整個證書的事情,但感覺不對。我只是想使用我的瀏覽器所使用的相同證書。
我已經嘗試過加入-Djavax.net.ssl.trustStore=cacerts
屬性,它改變了例外javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
,我已經從this question採取意味着它不能找到一個名爲cacerts
信任存儲。不過,我不確定還需要指定什麼。
似乎'mysite.com'使用自簽名證書,等等。您是否已將'mysite.com'提供的證書導入到'cacerts'? –
我還沒有手動添加任何東西。我想,因爲我的瀏覽器可以找到證書,Java也應該能夠以某種方式獲得,我只需要告訴它在哪裏尋找。 – Jorn
您需要使用jvm隨附的'keytool'命令來導入您的密鑰庫中的服務器證書(最有可能是簽名它的根CA)。 'cacerts'是jvm –