https正在成為主流,http估計在不久的將來會被徹底放棄……
一個Java程序需要訪問一個https的網站的時候,可能需要涉及證書的安裝,卸載等操作。
一、證書的下載
打開瀏覽器輸入https://的網站,如果沒有相關證書,可以根據提示從瀏覽器中下載下來,一般保存為*.cer文件。
二、證書的安裝
1. 將步驟一的*.cer文件拷貝到"%JAVA_HOME%\jre\lib\security\cacerts"路徑下 2. keytool -import -keystore cacerts -storepass changeit -keypass changeit -alias my-cas -file *.cer證書的絕對位置
三、證書的查看
keytool -list -v -alias my-cas -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -keypass changeit
四、證書的刪除
keytool -delete -v -alias my-cas -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -storepass changeit -keypass changeit
五、一個錯誤
發布並運行一個WEB項目,登錄SSL系統時得到這個錯誤信息:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
六、解決過程及結論
1. 所有搜索到的結論都是【沒有正確的安裝證書】。
2. 可是我用步驟三顯示並證明了已經正確的安裝了證書。
3. 靈光一現,會不會是JDK不兼容?已經確認證書由JDK1.7生成,我當前的環境是JDK1.8。
4. 安裝了一個JDK1.7,然后發現Eclipse Neon(4.6.2)不支持JDK1.7。
5. 下載了Eclipse Mars(4.5.2),項目運行成功了!
6. 似乎得到結論?JDK版本不一致導致的問題?
7. 繼續測試,將JDK還原成1.8版本。
8. 通過Eclipse Mars運行WEB項目,還是成功的!
9. JDK1.8表示這個鍋我不背……
10. 重新使用Eclipse Neon運行,還是相同的錯誤信息。
11. Eclipse Neon的問題???
12. 最后一擊,用Neon重新發布項目,通過Eclipse Server運行,報錯依舊。同一個項目,直接手動啟動tomcat,成功運行!
13. 結論:
1 此次測試環境證書安裝是正確的。 2 JDK1.7和JDK1.8關於SSL證書這塊是兼容的。 3 Eclipse Neon(4.6.2)在SSL證書這塊是有BUG的。
如果萬一遇到和我用同樣版本開發的朋友遇到同樣的問題,不要一味的糾結自己的證書,換個IDE試一下吧。
