keytool是一个Java数据证书的管理工具,keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:
(1)密钥实体(Key entity)
a、密钥(secret key)
b、私钥和配对公钥(采用非对称加密)。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。
(2)可信任的证书实体(trusted certificate entries)
a、只包含公钥
注意:ailas(别名)每个keystore都关联这一个独一无二的alias(别名),这个alias通常不区分大小写
JDK中keytool常用命令
-genkey
在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书。在没有指定生成位置的情况下,keystore会存在用户系统默认目录。
实例:不指定keystore文件的存储位置,如下:D:\>keytool -genkey
-alias aliasTest
-keyalg RSA
-keysize 1024
-keypass aaaaaa
-storepass aaaaaa
-dname "cn=zhangsan,ou=,o=,l=Hangzhou,st=,c="
在windows7中将会在“C:\用户\当前用户”目录下面存在一个.keystore文件
-alias
产生别名。默认为:mykey。实例:在当目录下面创建一个keystore文件,如下:D:\>keytool -genkey
-alias testAlias
-keypass aaaaaa
-keyalg RSA
-keysize 1024
-validity 365
-keystore test.keystore
-storepass aaaaaa
-dname "CN=Zhangsan,OU=,O=,L=Hangzhou,ST=,C="
在windows的dos窗口执行该语句后,当前目录下面应该存在test.keystore文件。
-keystore
指定密钥库的名称(产生的各类信息将放在.keystore文件中)。默认放在用户主目录中名为.keystore的文件。
-keyalg
指定密钥的算法。如:RSA、DSA等。默认采用DSA算法。
-validity
指定创建的证书有效期多少天。默认为90天
-keysize
指定密钥长度。默认为1024位
-storepass
指定密钥库的密码(获取keystore信息所需的密码)
-keypass
指定别名条目的密码(私钥的密码)
-dname
指定证书拥有者信息 例如:"CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码"
-list
显示密钥库中的证书信息。实例:显示E目录下面的my.keystore文件中的证书信息,如:D:\>keytool -list -keystore test.keystore -storepass aaaaaa
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
testalias, 2015-12-7, PrivateKeyEntry,
证书指纹 (SHA1): C3:E9:34:D2:A2:9C:92:88:12:92:5A:A9:AC:D8:B9:B1:BA:52:53:E1
-v
显示密钥库中的证书详细信息。实例:使用-list -v显示证书的详细信息。如下:D:\>keytool -list -v -keystore test.keystore -storepass aaaaaa
密钥库类型: JKS
密钥库提供方: SUN
您的密钥库包含 1 个条目
别名: testalias
创建日期: 2015-12-7
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=Zhangsan, OU=, O=, L=Hangzhou, ST=, C=
发布者: CN=Zhangsan, OU=, O=, L=Hangzhou, ST=, C=
序列号: 6fcee440
有效期开始日期: Mon Dec 07 20:33:08 CST 2015, 截止日期: Tue Dec 06 20:33:08 CST 2016
证书指纹:
MD5: FD:65:55:14:E5:0B:E5:9F:9A:70:5F:F4:7E:84:38:B3
SHA1: C3:E9:34:D2:A2:9C:92:88:12:92:5A:A9:AC:D8:B9:B1:BA:52:53:E1
SHA256: 33:D1:D8:EE:B2:67:59:BB:E8:2B:8F:5C:07:78:89:CA:7C:E5:FE:AB:4F:17:46:3E:84:38:88:30:C4:0B:1A:B2
签名算法名称: SHA256withRSA
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 2D FE E9 75 8E B9 1F 81 4B 3F 8E D0 ED 28 F1 13 -..u....K?...(..
0010: FB 7D B9 87 ....
]
]
*******************************************
*******************************************
注意:
-v参数要配合-list一起使用,如下将会出现错误:D:\>keytool -v -keystore test.keystore -storepass aaaaaa
用法错误: 没有提供命令
密钥和证书管理工具
...
-export
将别名指定的证书导出到文件。格式如下:
keytool -export -alias 需要导出的别名
-keystore 指定keystore
-file 指定导出的证书位置及证书名称
-storepass 密码
实例:将test.keystore中别名为testAlias的导出一个test.crt证书。如下:D:\>keytool -export -alias testAlias
-keystore test.keystore
-file test.crt
-storepass aaaaaa
存储在文件 中的证书
-file
参数指定导出到文件的文件名。默认读时为标准输入,写时为标准输出
-delete
删除密钥库中某条目。格式如下:
keytool -delete
-alias 指定需删除的别
-keystore 指定keystore
实例:从test.keystore中删除别名testAlias的密钥条目,如下:D:\>keytool -delete
-alias testAlias
-keystore test.keystore
-storepass aaaaaa
如果没有任何提示,则表示你删除成功了。如果再次执行该语句,则会抛出如下错误信息:keytool 错误: java.lang.Exception: 别名 不存在
这是因为别名为testAlias的已经被删除了。
-storepass
密码
-printcert
查看导出的证书信息。如:keytool -printcert -file yushan.crt
-keypasswd
修改密钥库中指定条目口令。如:
keytool -keypasswd
-alias 需修改的别名
-keypass 旧密码
-new 新密码
-storepass keystore密码
-keystore sage
-storepasswd
修改keystore口令。如:
keytool -storepasswd
-keystore e:\yushan.keystore(需修改口令的keystore)
-storepass 123456(原始密码)
-new yushan(新密码)
-import
将已签名数字证书导入密钥库。如:
keytool -import
-alias 指定导入条目的别名
-keystore 指定keystore
-file 需导入的证书
到这里就基本上将keytool工具的每个参数的含义大概讲解了一下,下面你可以参考“Java中Keytool工具的使用总结(二)”来学习怎样使用keytool来生成我们需要的keystore文件和证书。祝你:学习成功!!!^_^