Java中Keytool工具的使用总结(一)

keytool是一个Java数据证书的管理工具,keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:(1)密钥实体(Key entity)a、密钥(secret key);b、私钥和配对公钥(采用非对称加密)。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。

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

存储在文件 <test.crt> 中的证书

-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> 不存在

这是因为别名为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文件和证书。祝你:学习成功!!!^_^

生活总会给你答案的,但不会马上把一切都告诉你。只要你肯等一等,生活的美好,总在你不经意的时候,盛装莅临。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号