SSL通关之keytool 命令(二)

来源:互联网 发布:农村淘宝是什么意思 编辑:程序博客网 时间:2024/05/21 23:43

在上一篇博客中,说到SSL的第一步就是要创建证书。(或者向第三方购买)

PS:最终上线的产品,证书会是向第三方认证机构购买的,但在开发过程中,是自己创建的。

创建证书的常用工具是keytool,这个是jdk自带的工具,只要电脑上装了jdk(并且环境变量里配置好了)就可以使用。

linux系统不能用keytool,要用openssl。

本篇所列的命令为keytool命令。


首先,列出参考文章:

1、创建证书过程参考:

http://wenku.baidu.com/link?url=uWTSct_uZYrcbG0RPpWTZ4Lmhz177Uv4xlMyBw6554YkzCG00GmKDscP36LSFDb3vdhpq2EW4VHUUzkyLjQdmepZbBpp29QxsAYzmRfJe9O

http://www.blogjava.net/icewee/archive/2012/06/04/379947.html

http://czj4451.iteye.com/blog/1487684

2、keytool命令解释参考:

http://blog.csdn.net/ygc87/article/details/7620942

http://www.cnblogs.com/benio/archive/2010/09/15/1826990.html(非常详细)


下面,简单介绍几个常用命令的说明:

keytool常用命令 
-alias       产生别名 
-keystore    指定密钥库的名称(就像数据库一样的证书库,可以有很多个证书,cacerts这个文件是jre自带的, 
             你也可以使用其它文件名字,如果没有这个文件名字,它会创建这样一个) 
-storepass   指定密钥库的密码 
-keypass     指定别名条目的密码 
-list        显示密钥库中的证书信息 
-v           显示密钥库中的证书详细信息 
-export      将别名指定的证书导出到文件 
-file        参数指定导出到文件的文件名 
-delete      删除密钥库中某条目 
-import      将已签名数字证书导入密钥库 
-keypasswd   修改密钥库中指定条目口令 
-dname       指定证书拥有者信息 
-keyalg      指定密钥的算法 
-validity    指定创建的证书有效期多少天 
-keysize     指定密钥长度 

接下来,进入本文的重点——keytool命令创建ssl证书:

PS:仅仅用下面的命令创建bks是不能成功的,因为缺少一个bks支持的jar,具体的解决办法可以百度一下,网上很多。很简单,就是下载一个jar放到jdk的两个目录下,然后修改对于的两个配置文件就好了。

一、单向验证成功:

1、生产服务器端证书:
keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore D:\ssl\bks\server.jks -dname "CN=10.100.100.24,OU=test,O=test,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456
2、导出证书
keytool -exportcert -v -alias server -keystore D:\ssl\bks\server.jks -storepass 123456 -rfc -file D:\ssl\bks\server.cert
3、生产Android可用的客户端证书

keytool -importcert -keystore D:\ssl\bks\client.bks -file D:\ssl\bks\server.cert -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider  -storepass 123456


PS:ios单项验证不需要证书


二、同一个server,两份不同的client证书(一份bks,Android用的,一份是jks,ios用的),双向认证成功:

1、创建server端证书:

keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore D:\ssl\server.keystore -dname "CN=10.100.100.24,OU=test,O=test,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


2、创建Android客户端证书:(双向(Android)验证成功)

最终要给客户端用的证书是:client-bks-trust.bks、client-bks.bks 


keytool -validity 365 -genkeypair -v -alias client-bks -keyalg RSA -storetype BKS -keystore D:\ssl\client-bks.bks -dname "CN=client,OU=test,O=test,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


keytool -export -v -alias client-bks -keystore D:\ssl\client-bks.bks -storetype BKS -storepass 123456 -rfc -file D:\ssl\client-bks.crt


keytool -export -v -alias server -keystore D:\ssl\server.keystore -storepass 123456 -rfc -file D:\ssl\server.crt


keytool -importcert -keystore D:\ssl\client-bks-trust.bks -file D:\ssl\server.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider  -storepass 123456


keytool -import -v -alias client-bks -file D:\ssl\client-bks.crt -keystore D:\ssl\server.keystore -storepass 123456


3、创建ios客户端证书(ios:双向验证成功)

最终发给ios客户端的证书是:client-ios.truststore(该格式也可以为.p12,但此处的文件与下面第一行生成的client-ios.p12文件是不同的文件)


keytool -validity 365 -genkeypair -v -alias client-ios -keyalg RSA -storetype PKCS12 -keystore D:\ssl\client-ios.p12 -dname "CN=client-ios,OU=test,O=test,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


keytool -export -v -alias client-ios -keystore D:\ssl\client-ios.p12 -storetype PKCS12 -storepass 123456 -rfc -file D:\ssl\client-ios.cer -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass 123456


keytool -export -v -alias server -keystore D:\ssl\server.keystore -storepass 123456 -rfc -file D:\ssl\server-ios.cer


keytool -import -v -alias server -file D:\ssl\server-ios.cer -keystore D:\ssl\client-ios.truststore -storepass 123456


keytool -import -v -alias client-ios -file D:\ssl\client-ios.cer -keystore D:\ssl\server.keystore -storepass 123456


三、(也可以用java代码测试)

ios-jks:双向成功


keytool -validity 365 -genkey -v -alias server -keyalg RSA -keystore D:\ssl\ios-jks\server.keystore -dname "CN=10.100.100.24,OU=test,O=test,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


keytool -validity 365 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore D:\ssl\ios-jks\client.p12 -dname "CN=client,OU=test,O=test,L=Haidian,ST=Beijing,c=cn" -storepass 123456 -keypass 123456


keytool -export -v -alias client -keystore D:\ssl\ios-jks\client.p12 -storetype PKCS12 -storepass 123456 -rfc -file D:\ssl\ios-jks\client.cer -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass 123456


keytool -export -v -alias server -keystore D:\ssl\ios-jks\server.keystore -storepass 123456 -rfc -file D:\ssl\ios-jks\server.cer


keytool -import -v -alias server -file D:\ssl\ios-jks\server.cer -keystore D:\ssl\ios-jks\client.truststore -storepass 123456


keytool -import -v -alias client -file D:\ssl\ios-jks\client.cer -keystore D:\ssl\ios-jks\server.keystore -storepass 123456
0 0
原创粉丝点击