一:生成keystore文件keytool是Java的數(shù)字證書管理工具,位于%JAVA_HOME%\bin目錄下,keytool可以將密鑰(key)和證書(certificates)存在一個稱為keystore的文件中。
D:\>keytool -import -file d:\google.cer -keystore d:\google.keystore
輸入keystore密碼:
再次輸入新密碼:
所有者:CN=www.google.com, O=Google Inc, L=Mountain View, ST=California, C=US
簽發(fā)人:CN=Thawte SGC CA, O=Thawte Consulting (Pty) Ltd., C=ZA
序列號:2fdfbcf6ae91526d0f9aa3df40343e9a
有效期: Fri Dec 18 08:00:00 CST 2009 至Mon Dec 19 07:59:59 CST 2011
證書指紋:
MD5:C4:70:74:FB:69:F9:E3:94:7E:8B:28:A4:00:73:DE:01
SHA1:40:50:62:E5:BE:FD:E4:AF:97:E9:38:2A:F1:6C:C8:7C:8F:B7:C4:E2
簽名算法名稱:SHA1withRSA
版本: 3
信任這個認(rèn)證? [否]: 是
認(rèn)證已添加至keystore中
此時D盤根目錄下生成google.keystore文件
二:信任證書System.setProperty ("javax.net.ssl.trustStore","d:\\google.keystore");
System.setProperty ("javax.net.ssl.trustStorePassword","123456");
三:校驗(yàn)證書
如果證書中頒發(fā)給的名稱與所通信的地址域名不一致的話,將報以下錯誤:
javax.net.ssl.SSLException: hostname in certificate didn't match: <www.google.com.hk> != <www.google.com>
那就需要在通信前重寫校驗(yàn)方法。
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
return urlHostName.equals(session.getPeerHost());
}
};
HttpsURLConnection.setDefaultHostnameVerifier (hv);