我的Java程序使用GitHub的原始地址訪問版本文件以獲取最新版本。這個地址的格式爲https://raw.github.com/user/repository/branch/version_file使用未經驗證的SSL證書通過HTTPS下載文件
在測試階段,我用這個用下面的代碼沒有問題:
currentVersion = new Version(plugin.getDescription().getVersion());
URL url = new URL("https://raw.github.com/zonedabone/CommandSigns/master/VERSION");
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
newestVersion = new Version(in.readLine());
if (currentVersion.compareTo(newestVersion) < 0)
newAvailable = true;
然而,一些用戶抱怨以下錯誤:
sun.security.validator.ValidatorException:
PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException:
unable to find valid certification path to requested target
Java正在抱怨它無法驗證SSL證書。 GitHub的證書由DigiCert驗證,但顯然一些Java版本不會識別這一點。
我讀過有兩種方法可以解決這個問題:將證書添加到TrustStore並完全禁用驗證。
答案建議在計算器上或者使用的允許,所有信任庫,這將是考慮到它是不是一個「測試環境」,或者如果他們展示如何添加證書,他們通常的範圍內一個非常糟糕的主意鏈接到一個破碎的網頁。
有人可以提供新的信息嗎?
此問題已在SO和網上進行了無數次的提問和回答。請在「java自簽名證書」上進行Google搜索並刪除此問題。 –
[我如何使用Java HttpsURLConnection接受自簽名證書?](http://stackoverflow.com/questions/859111/how-do-i-accept-a-self-signed-certificate-with -a-java-httpsurlconnection) –
@JimGarrison,真的,不幸的是,谷歌搜索將導致一些答案,建議使用信任管理器,信任任何證書... – Bruno