JDK里自带的,位于<JAVA_HOME>inkeytool.exe
Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中
在keystore里,包含两种数据:
密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
可信任的证书实体(trusted certificate entries)——只包含公钥
keytool -help
密钥和证书管理工具 命令: -certreq 生成证书请求 -changealias 更改条目的别名 -delete 删除条目 -exportcert 导出证书 -genkeypair 生成密钥对 -genseckey 生成密钥 -gencert 根据证书请求生成证书 -importcert 导入证书或证书链 -importpass 导入口令 -importkeystore 从其他密钥库导入一个或所有条目 -keypasswd 更改条目的密钥口令 -list 列出密钥库中的条目 -printcert 打印证书内容 -printcertreq 打印证书请求的内容 -printcrl 打印 CRL 文件的内容 -storepasswd 更改密钥库的存储口令
1.创建证书
>keytool -genkeypair -alias "test" -storetype pkcs12 -keyalg "RSA" -keystore "test.p12" 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: li 您的组织单位名称是什么? [Unknown]: abc 您的组织名称是什么? [Unknown]: xyz 您所在的城市或区域名称是什么? [Unknown]: Ji 您所在的省/市/自治区名称是什么? [Unknown]: Dong 该单位的双字母国家/地区代码是什么? [Unknown]: CC CN=li, OU=abc, O=xyz, L=Ji, ST=Dong, C=CC是否正确? [否]: y
生成了证书test.p12
说明:
-storetype 指定仓库类型, JKS、 JCEKS、 PKCS12 等
-keyalg 指定密钥的算法, RSA、 DSA 等,默认DSA
-keysize 指定密钥长度,默认2048
-alias:指定密钥对的别名,该别名是公开的
-keystore:密钥库的路径及名称
2.查看证书
>keytool -list -keystore test.p12 输入密钥库口令: 密钥库类型: JKS 密钥库提供方: SUN 您的密钥库包含 1 个条目 test, 2020-4-14, PrivateKeyEntry, 证书指纹 (SHA1): 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15
3.导出证书
>keytool -export -alias test -file test.crt -keystore test.p12
输入密钥库口令:
存储在文件 <test.crt> 中的证书
查看crt证书信息
>keytool -printcert -file test.crt
所有者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China
发布者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China
序列号: 492e4a72
有效期为 Tue Apr 14 14:33:17 CST 2020 至 Mon Jul 13 14:33:17 CST 2020
证书指纹:
MD5: D7:F1:E5:83:D6:6F:3F:77:C0:EE:C3:4A:51:EF:82:D1
SHA1: 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15
SHA256: 77:12:78:1D:A7:96:22:CD:C1:18:EC:2F:9C:76:01:59:ED:0B:09:A6:C0:EF:37:F5:BA:41:9C:88
:3A:16:E1:42
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3
扩展:
#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: C1 AB 06 D8 FA 6E 91 2C 43 0C DE 66 D1 B6 92 F6 .....n.,C..f....
0010: D4 8D D6 70 ...p
]
]
4.导入证书
>keytool -import -keystore test_crt -file test.crt 输入密钥库口令: 再次输入新口令: 所有者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China 发布者: CN=li, OU=abc, O=xyz, L=Jinan, ST=Shandong, C=China 序列号: 492e4a72 有效期为 Tue Apr 14 14:33:17 CST 2020 至 Mon Jul 13 14:33:17 CST 2020 证书指纹: MD5: D7:F1:E5:83:D6:6F:3F:77:C0:EE:C3:4A:51:EF:82:D1 SHA1: 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15 SHA256: 77:12:78:1D:A7:96:22:CD:C1:18:EC:2F:9C:76:01:59:ED:0B:09:A6:C0:EF:37:F5:BA:41:9C:88 :3A:16:E1:42 签名算法名称: SHA256withRSA 主体公共密钥算法: 2048 位 RSA 密钥 版本: 3 扩展: #1: ObjectId: 2.5.29.14 Criticality=false SubjectKeyIdentifier [ KeyIdentifier [ 0000: C1 AB 06 D8 FA 6E 91 2C 43 0C DE 66 D1 B6 92 F6 .....n.,C..f.... 0010: D4 8D D6 70 ...p ] ] 是否信任此证书? [否]: y 证书已添加到密钥库中
5.删除
查看
>keytool -list -keystore test_crt 输入密钥库口令: 密钥库类型: JKS 密钥库提供方: SUN 您的密钥库包含 1 个条目 mykey, 2020-4-14, trustedCertEntry, 证书指纹 (SHA1): 5B:E7:9D:E8:84:6B:17:E4:CF:1C:EA:49:00:38:CD:3B:AF:FC:43:15
删除
>keytool -delete -keystore test_crt -alias mykey
6.修改证书条目的口令
>keytool -keypasswd -alias test -keystore test.p12 输入密钥库口令: 输入 <test> 的密钥口令 新<test> 的密钥口令: 重新输入新<test> 的密钥口令: