leisure

JAVA - exceed,helloworld
随笔 - 50, 文章 - 0, 评论 - 11, 引用 - 0
数据加载中……

Java安装本地证书

一:生成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);

posted on 2011-09-17 21:13 leisure 阅读(2369) 评论(1)  编辑  收藏 所属分类: java

评论

# re: Java安装本地证书[未登录]  回复  更多评论   

谢谢,正在google解决此问题,你写的很清楚!
2012-08-25 11:06 | joe

只有注册用户登录后才能发表评论。


网站导航: