运用keytool来创建管理密钥及证书
使用SSL来实现安全加密通讯需要有密码对及公钥证书等..
JDK中自带的一个工具keytool就可以用来生成密钥对..管理密码仓库以及证书的导入导出..
keytool的默认路径在~\java\jdk1.7.0\bin\下..以下介绍keytool的几种基本应用..
1)创建服务端密钥库
>keytool -genkey -keystore d:\serverkey.jks -keyalg rsa -alias ssl1 -validity 700
上述命令中:
-genkey 生成密钥对
-keystore 指定密码仓库的文件地址
-keyalg 密钥所使用的算法
-alias 密钥别名..使用密钥时是使用此别名来区分的
-validity 密钥有效期(天)..从当前系统时间开始计算
该命令成功后会要求输入密码仓库的密码..例如111111
然后是输入你的个人信息..
最后会要求输入别名的密码..例如222222
创建成功后..在建立服务端的SSL连接时用下述方法导入密钥..
String keyFile = serverkey.jks
String keyFilePass = "111111"
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream(keyFile), keyFilePass.toCharArray());
再利用该密码仓库来进行相应操作..
2)将服务端的公钥导出成证书
>keytool -export -alias ssl1 -file d:\ssl1.cer -keystore d:\serverkey.jks
-export 导出
导出成功后就得到了ssl1.cer这一份证书了..然后就是要将这一份证书分发给客户端..客户端有了该证书后就能与服务端建立安全连接了..
3)生成客户端的密钥仓库
方法与1)类似..
4)将*.cer导入到客户端的密钥仓库里
>keytool -import -file d:\ssl1.cer -keystore d:\clientkey.jks
-import 导入
上述命令成功后会要求输入客户端密钥仓库的密码..
成功后在每次要访问服务端之前还要将该证书添加到受信域中..系统会自动从受信域中检查可用的证书来完成SSL连接通讯..
String keyFile = clientkey.jks
String keyFilePass = "111111"
System.setProperty("javax.net.ssl.trustStore",keyFile);
System.setProperty("javax.net.ssl.trustStorePassword",keyFilePass);
以上..实现了密钥对的创建及管理之后..我们就可以开始实现SSL通讯了..