cerulean

关于证书

Server

创建本地证书:

keytool -genkey -alias testserver-keyalg RSA -keystore keystore

其中alias自己起一个别名,keystore为证书库的文件路径

还可以加上-keysize 1024、2048、4096等来指定公钥的大小,由此导出的证书查看时可以看到公钥的大小是与之一致的。keysize越大genkey时耗费时间越长。


会要求键入一个密码,为这个证书库的访问密码

会要求填写一些信息,姓名、单位、地区之类

最后要求键入一个密码,为这条证书别名的密码

导出cert

keytool -export -alias testserver-file testcert.cer -keystore keystore

这里的别名和文件名同上一步


Client

直接导入cert

Truststore文件中存储的是作为client,信任那些server的证书。所以需要将server提供的证书导入进来(当然可以导入n个),client才能信任。

keytool -import -alias testserver-file testcert.cer -keystore truststore

导入时需要输入密码,该密码应该是truststore文件的访问密码,密码正确才能修改其信息。

提示是否信任该证书信息,确认。

查看证书信息:

keytool –list –v –keystore truststore

如果导入过多个,则可以看到多条entry

删除某一个证书entry,通过指定别名来删:

keytool -delete -alias testserver-keystore truststore


上述是自签名的证书,证书链的长度只为
1

真正商用时,需要找相关机构(例如verisign)认证通过才能成为有效的证书:

生成证书签名请求:

keytool -certreq -keyalg RSA -alias testserver -file certreq.csr -keystore keystore

之后能够收到一个证书文件,证书链信息包含了该机构的一些信息,然后再导入。


有两种方法建立
HTTPS连接,

一种是,在java中可以设置相关的4个系统参数,指向相关的keystore,truststore,一旦设置,在运行时就不可改变了。除非一定要使用多个不同的证书库文件,否则可以把多个不同证书都导入到同一个证书库里,这样,设置系统参数为唯一的值也够用,而且也比较简单一些。

另一种是,自己继承相关接口实现自己的证书管理器,这样可以自定义相关行为,也可以load不同的证书库。


如果不设置
password,就认为不检查文件完整性,也能通过。如果设置了password,但是不正确,则会遇到密码错误的异常;如果server证书没有导入到client得信任列表里,则会遇到找不到可信证书的异常。

posted on 2009-07-16 17:27 cerulean 阅读(561) 评论(0)  编辑  收藏 所属分类: Java


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


网站导航:
 

导航

<2009年7月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜