keytool使用方法

keytool使用方法

keytool是jdk自带的一个密钥库管理工具,位于%JAVA_HOME%\bin\keytool.exe,我们可以使用它生成密钥库、管理证书。

jdk版本

jdk17

关于PKCS12和JKS

由于jdk版本的不同,生成的keystore格式也就不同,使用jdk1.8生成的keystore格式为jks,并且生成后会提示:

Warning:

JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore my.keystore -destkeystore my.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。

也就是建议将jks密钥库转换为PKCS12格式。

我们用jdk17版本的keytool生成的密钥库类型为PKCS12,而PKCS12只有storepass属性,没有keypass,因此我们单独指定密钥条目的密码,即填入的keypass将不会生效,签名的时候也会无法正常按照我们创建时填写的keypass来读取我们的密钥

keystore

keystore可以理解为一个数据库表,证书就相当于表里保存的记录,也就是说,当keystore存在后,就可以向里面增加、删除、修改证书了,不同的证书有不同的别名,相当于记录的主键,用于区分不同的证书,并且还能导入导出证书。

新建密钥条目

keytool -genkeypair -alias sastest -keyalg RSA -validity 365 -keystore my.keystore -storepass 111111

#功能:

#创建一个别名为sastest的密钥条目(证书),该密钥条目(证书)存放在名为my.keystore的密钥库中,若my.keystore密钥库不存在则创建。

# 参数解释:

# -genkeypair:生成一对非对称密钥((公钥和私钥));

# storepass keystore文件存储密码,不加这个参数会在后面要求你输入密码

# alias 密钥条目的别名,该别名是公开的

# keyalg 采用公钥算法,默认是DSA,这里采用RSA,如果不指定默认采用DSA

# keysize 密钥长度(DSA算法对应的默认算法是sha1withDSA,不支持2048长度,此时需指定RSA)

# validity 有效期

# keystore 指定keystore文件储存位置

注意:高版本的jdk生成密钥时,不能单独指定密钥条目的口令,也就是不能再上面的命令中单独指定-keypass选项,例如:

keytool -genkeypair -alias springboot -keypass 123123 -keyalg RSA -validity 365 -keystore my.keystore -storepass 111111

执行时,会忽略keypass,提示如下:

C:\test>keytool -genkeypair -alias springboot -keypass 123123 -keyalg RSA -validity 365 -keystore my.keystore -storepass 111111

警告: PKCS12 密钥库不支持其他存储和密钥口令。正在忽略用户指定的-keypass值。

默认的密钥条目的口令和密钥库的口令一致,都为111111,PKCS12格式的密钥库目前还没找到修改密钥条目口令的方法

追加密钥条目

keytool -genkeypair -alias springboot -keyalg RSA -validity 365 -keystore my.keystore -storepass 111111

如果指定的是同一个keystore,则新的密钥条目就会追加到该密钥库中。

查看密钥库

keytool -list -v -keystore my.keystore -storepass 111111

keytool -list -rfc -keystore my.keystore -storepass 111111

#参数:

#-list 列出证书

#-v 显示详细信息

#-keystore 指定密钥库

#-storepass 指定密钥库的解密密码

#-rfc 以可编码方式打印证书

我们会看到如下内容:

C:\test>keytool -list -v -keystore my.keystore -storepass 111111

密钥库类型: PKCS12

密钥库提供方: SUN

您的密钥库包含 2 个条目

别名: sastest

创建日期: 2022年12月25日

条目类型: PrivateKeyEntry

证书链长度: 1

证书[1]:

所有者: CN=xie, OU=xie, O=xie, L=urumqi, ST=xj, C=cn

发布者: CN=xie, OU=xie, O=xie, L=urumqi, ST=xj, C=cn

序列号: ac1dc76f8866df60

生效时间: Sun Dec 25 18:45:35 CST 2022, 失效时间: Mon Dec 25 18:45:35 CST 2023

证书指纹:

SHA1: 30:CE:BB:12:C3:7E:92:BA:3C:28:C6:6B:33:4F:C1:2B:5A:31:F8:09

SHA256: 9A:FC:B7:EB:10:85:EF:B5:50:2C:7C:65:B3:49:5B:A2:5F:FF:3A:D3:A4:92:EF:B8:FE:CC:E4:B2:D9:F9:ED:9B

签名算法名称: SHA256withRSA

主体公共密钥算法: 2048 位 RSA 密钥

版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: 08 E8 48 AA B9 4D 19 37 FA 88 90 5D 0D 9C 8D 00 ..H..M.7...]....

0010: C9 2B C9 57 .+.W

]

]

*******************************************

*******************************************

别名: springboot

创建日期: 2022年12月25日

条目类型: PrivateKeyEntry

证书链长度: 1

证书[1]:

所有者: CN=tong, OU=tong, O=tong, L=tong, ST=tong, C=cn

发布者: CN=tong, OU=tong, O=tong, L=tong, ST=tong, C=cn

序列号: 557545a707213717

生效时间: Sun Dec 25 18:47:37 CST 2022, 失效时间: Mon Dec 25 18:47:37 CST 2023

证书指纹:

SHA1: 65:95:D9:BD:67:07:A6:5D:18:DA:7F:67:9B:75:82:B4:19:13:9B:FD

SHA256: 16:17:C5:5D:AD:AB:B4:5C:EC:16:8C:8E:9F:12:C7:F5:EC:83:1D:6A:5E:10:E5:FC:F2:4B:9F:96:73:1D:E7:F2

签名算法名称: SHA256withRSA

主体公共密钥算法: 2048 位 RSA 密钥

版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: ED 14 D4 39 93 13 47 66 B6 DF EA 32 D7 BC 88 54 ...9..Gf...2...T

0010: CD CC 8D B6 ....

]

]

*******************************************

*******************************************

我们看到:密钥库类型: PKCS12,也就是说这个keytool版本不让我们的库秘钥和别名秘钥不一致

删除密钥条目

keytool -delete -keystore my.keystore -storepass 111111 -alias springboot

#删除密钥库my.keystore中别名为springboot的证书条目

修改keystore口令

注意,此处修改的时keystore的口令,不是某个密钥条目的密码

keytool -storepasswd -keystore my.keystore -storepass 111111 -new 123123

导出密钥条目(证书)

keytool -export -alias sastest -file test.crt -keystore my.keystore -storepass 111111

或者

keytool -exportcert -alias sastest -file test.crt -keystore my.keystore -storepass 111111

导入证书

keytool -import -alias sastest -file test.crt -keystore my.keystore -storepass 111111

如果指定了-alias选项,新导入的密钥条目名称就是指定的名称,否则给一个默认的名字“MyKey”

打印证书

keytool -printcert -file test.crt

相关文章

米布丁的做法
365b体育最新下载地址

米布丁的做法

🕒 07-07 👁️ 1676
dnf黑枪龙枪哪个好玩
365b体育最新下载地址

dnf黑枪龙枪哪个好玩

🕒 12-09 👁️ 5108
国内钽金属市场与回收:你的“废料”可能是下一个“财富风口”!
詹妮弗洛佩兹世界杯主题曲?世界杯主题曲都有哪些
365b体育最新下载地址

詹妮弗洛佩兹世界杯主题曲?世界杯主题曲都有哪些

🕒 09-02 👁️ 6950
瓠瓜切开能保存多久 瓠瓜的功效和作用
365b体育最新下载地址

瓠瓜切开能保存多久 瓠瓜的功效和作用

🕒 09-05 👁️ 9845
【日劇推介】《爸爸活》新現象 有愛冇性的禁斷父女戀
ios16隐藏照片在哪怎么找不到
microsoft365破解版

ios16隐藏照片在哪怎么找不到

🕒 07-08 👁️ 1875
朗逸和高尔夫哪个好,朗逸和高尔夫的区别
microsoft365破解版

朗逸和高尔夫哪个好,朗逸和高尔夫的区别

🕒 11-27 👁️ 5636
南京小米手机维修点查询
日博best365下拉飞机XLCOKK

南京小米手机维修点查询

🕒 02-11 👁️ 9148