keytool用法

  JDK里面自带了一个密钥生成工具keytool,可以通过它生成SSL 通信需要的密钥对,或者生成自签名的证书。所有密钥对或者签名证书都是存放在“keystore”密钥仓库中,由它来管理。
下面结合具体例子说明:(java  WEB容器:tomcat 5.0) 
1,生成服务端密钥仓库, 
keytool -genkey -alias svrkey -keyalg RSA -keystore d:/svr.jks -validity 365 
"alias"是生成的密钥别名,密钥的导入导出都需要由别名来定位。 
"keystore"生成的密钥仓库 
"validity"生成密钥仓库的有效期(天) 
随后会要求输入密钥仓库入口密码,比如: lostsky_11
输完密码后,接着会要求一系列的输入,无非是单位,所在地区之类的信息, 
但是第一项很重要!为输入服务端域名或IP,如: 192.168.1.3或www.591pic.com 

必须与服务器域名或IP相同,否则SSL 连接无法建立(这也是SSL 通信验证的一部分) 


2,在tomcat_home/conf/server.xml中配置: 
找到ssl 通信配置那一段,加入: 
keystoreFile="d:/svr.jks" keystorePass="lostsky_11" 
服务器启动时会从中寻找用于建立ssl 连接的密钥 


3,导出服务端证书 
keytool -export -alias svrkey -file d:/svr.cer -keystore d:/svr.jks 
"alias"为想导出的密钥的别名,"file"为导出的证书,"keystore"为存储着导出密钥的仓库 
4,生成客户端密钥仓库 
keytool -genkey -alias clientkey -keyalg RSA -keystore d:/client.jks 
会要求输入仓库密码:如:midsky
5,将服务端证书导入到客户端密钥仓库 
keytool -import -file d:/svr.cer -keystore d:/client.jks 
会要求输入客户端密钥仓库的密码:如上是:midsky
6,在客户端,每次访问服务端之前,加入 
"System.setProperty("javax.net.ssl .trustStore","d://client.jks"); 
System.setProperty("javax.net.ssl .trustStorePassword","midsky"); " 
就把服务端证书添加到了客户端的信任域中,能够完成ssl 通信。 

注:ssl 通信主要验证三个方面: 
a, 证书是否可信(第6步) 
b, 证书是否过期(第1步:validity) 
c, 证书地址是否和当前访问地址符合(第1步) 


以上是客户端对于服务端的验证,这也是SSL 默认的实现方式。在这种方式下,每次通信时,发起请求方(如PC中的BROWSER)都会验证响应方(如某个WEB服务端)的证书是否在己方信任域中,对 方的证书是否过期,对方的域名或IP,是否与信任域中证书记载的一致;不符合其中任何一项,通信都会被拒绝。但反过来,响应方是不对请求方做任何验证的。 所以有些需要双向验证的服务(比如某些服务只能对特定的拥有证书的用户开放),就需要添加客户端证书,由服务端来验证了,原理和实现与默认模式类似。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值