一:生成keystore文件keytool是Java的数字证书管理工具,位于%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
签发人: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
信任这个认证? [否]: 是
认证已添加至keystore中
此时D盘根目录下生成google.keystore文件
二:信任证书System.setProperty ("javax.net.ssl.trustStore","d:\\google.keystore");
System.setProperty ("javax.net.ssl.trustStorePassword","123456");
三:校验证书
如果证书中颁发给的名称与所通信的地址域名不一致的话,将报以下错误:
javax.net.ssl.SSLException: hostname in certificate didn't match: <www.google.com.hk> != <www.google.com>
那就需要在通信前重写校验方法。
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String urlHostName, SSLSession session) {
return urlHostName.equals(session.getPeerHost());
}
};
HttpsURLConnection.setDefaultHostnameVerifier (hv);