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
一個很簡單的富客戶端到WEB 服務器的連接,基本都能夠正常建立連接,唯獨公司NEXT、TIMS總是報javax.net.ssl.SSLHandshakeException和 sun.security.provider.certpath.SunCertPathBuilderException的異常,網上轉了轉,找到幾篇 前輩的文章,摘下點重點以便以后繼續剽與竊。
在項目開發中,有時會遇到與SSL安全證書導入打交道,如何把證書導入java的cacerts證書庫?簡單的用NEXT做個演示:
第一步:IE打開https://next.xxxcorp.cn,把要導入java證書庫的證書下載
在該網頁安全警報彈出窗口上查看證書--詳細信息--復制到文件
會彈出一個證書導出向導對話框,按提示一直下一步直到完成。
我把證書保存在C盤,名字為NEXT_CertKey.cer。
第二步:將上面導出的證書導入java中的cacerts證書庫
cmd進入C:\Program Files\Java\jdk1.5.0_06\jre\lib\security目錄
敲入如下命令回車執行
keytool -import -alias cacerts
-keystore C:\Program Files\Java\jdk1.5.0_06\jre\lib\security\cacerts
-file C:\NEXT_CertKey.cer
-trustcacerts
此時命令行會提示你輸入cacerts證書庫密碼,
java中cacerts證書庫默認密碼為changeit,
Y確認即可,OK,認證已添加至keystore。
附:URLConnection、URL
try {
URL url;
url = new URL("https://next.xxxcorp.cn");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoOutput(true);
BufferedReader reader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
String input = null;
while ((input = reader.readLine()) != null) {
System.out.println(input);
}
reader.close();
urlConnection.disconnect();
} catch (IOException e) {
e.printStackTrace();
}