行业知识
Java——Keytool工具详解
2026-10-25 18:55:17
来源:互联网转载
目录
- Keytool
- 1、-genkeypair(生成密钥对/创建数字证书)
- 2、-list(列出密钥库中的条目)
- 3、-storepasswd(更改密钥库的存储口令)
- 4、-changealias(更改条目的别名)
- 5、-delete(删除条目)
- 6、-exportcert(导出证书)
- 7、-printcert(打印证书内容)
- 8、-certreq(生成证书请求)
- 9、-printcertreq(打印证书请求的内容)
- 10、-gencert(根据证书请求生成证书)
- 11、-importcert(导入证书或证书链)
Keytool
keytool为java原生自带,安装java后不需要再进行安装,作为密钥和证书管理工具,方便用户能够管理自己的公钥/私钥及证书,用于认证服务。
()- -certreq:生成证书请求
- -changealias:更改条目的别名
- -delete:删除条目
- -exportcert:导出证书
- -genkeypair:生成密钥对
- -genseckey:生成密钥
- -gencert:根据证书请求生成证书
- -importcert:导入证书或证书链
- -importpass:导入口令
- -importkeystore:从其他密钥库导入一个或所有条目
- -keypasswd:更改条目的密钥口令
- -list:列出密钥库中的条目
- -printcert:打印证书内容
- -printcertreq:打印证书请求的内容
- -printcrl:打印 CRL 文件的内容
- -storepasswd:更改密钥库的存储口令
1、-genkeypair(生成密钥对/创建数字证书)
可用选项:
-alias 要处理的条目的别名 -keyalg 密钥算法名称 -keysize 密钥位大小 -sigalg 签名算法名称 -destalias 目标别名 -dname 唯一判别名 -startdate 证书有效期开始日期/时间 -ext X.509 扩展 -validity 有效天数 -keypass 密钥口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
KeyTool工具支持RSA和DSA两种算法,且DSA算法为默认算法。
()示例:
keytool -genkeypair -keyalg RSA -keysize 2048 -sigalg SHA1withRSA -validity 36000 -alias acton -keystore acton.keystore -dname "CN=acton, OU=acton, O=acton, L=BJ, ST=BJ, C=CN" -storepass 123456
- keyalg:密钥算法为RSA
- keysize:密钥长度为2048,默认为1024
- sigalg:数字签名算法为SHA1withRSA
- validity:证书有效期为36000天
- -alias:别名为acton
- keystore:密钥库存储位置acton.keystore
- dname:指定用户信息
- CN:姓名
- OU:组织单位名
- O:组织名
- L:城市或区域名
- ST:州或省份名
- C:国家代码
- storepass:密钥库密码123456
此时已经生成了一个没有经过认证的数字证书,和一个JKS格式的密钥库。
JKS为Java专用格式,可以使用如下命令转换为标准格式PKCS12
keytool -importkeystore -srckeystore acton.keystore -destkeystore acton.keystore -deststoretype pkcs12
2、-list(列出密钥库中的条目)
可用选项:
-rfc 以 RFC 样式输出 -alias 要处理的条目的别名 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
示例:查看所有条目
keytool -list -keystore acton.keystore -storepass 123456
密钥库类型: jks密钥库提供方: SUN您的密钥库包含 1 个条目acton, 2023-11-27, PrivateKeyEntry,证书指纹 (SHA1): 03:CD:A0:1C:1F:E2:50:04:1B:C8:D4:9F:35:97:0D:20:D6:E3:21:90
示例:查看指定别名
keytool -list -keystore acton.keystore -storepass 123456 -alias acton
acton, 2023-11-27, PrivateKeyEntry,证书指纹 (SHA1): 03:CD:A0:1C:1F:E2:50:04:1B:C8:D4:9F:35:97:0D:20:D6:E3:21:90
示例:以RFC样式输出
keytool -list -keystore acton.keystore -storepass 123456 -alias acton -rfc
别名: acton创建日期: 2023-11-27条目类型: PrivateKeyEntry证书链长度: 1证书[1]:-----BEGIN CERTIFICATE-----MIIDTzCCAjegAwIBAgIEOLT4rDANBgkqhkiG9w0BAQUFADBXMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxCzAJBgNVBAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwGA1UECxMFYWN0b24xDjAMBgNVBAMTBWFjdG9uMCAXDTIzMTEyNzA4NTMzN1oYDzIxMjIwNjIxMDg1MzM3WjBXMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxCzAJBgNVBAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwGA1UECxMFYWN0b24xDjAMBgNVBAMTBWFjdG9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk4AyvuJa5KjnFMnnOX1Um3m5V9N1kCorETOMEigsym2wamyqrw5cLeaT5al8IS18Qyczu69r0W/epW+e5Fsg7T8UsjfQwxt1b+A+E78bHQuPXhC6AznkS/MT5zT50twMseSf+RwuhrlH0YjKZxsERuIa09h2IoacnNkrAJf/Uh6PKl1otIoMKpE1uq9czo/q+UgJr0ruvajV9Z4pdvMH04rMcYtEnhHgOj5q9F4XWKHPltx5DRcEdv2dNVmBNDaMOtkRrkj2L0IMIwyiknqhNoz2JWUVrmButg3xesvK+U1jAoYA1I5p57OJuCkvGsrPLJs5sJO55F6zM4R8nn1j4wIDAQABoyEwHzAdBgNVHQ4EFgQUdbb+w+9kBVu9Wz6RZghPJL6LN80wDQYJKoZIhvcNAQEFBQADggEBAIqbMLrOgWOOmPpLEE2jDjcBCLc1LTkCCEdmarUo2Y+Fk7B3zseN1YRsWxpHx5V5UVmcdncfDQY0WRz+S7dBkIH9TyDTNVCkqKppZsLlZuIavsbZXHWr6GZb3FB8fhj7GhaqZ/HSh0qNL1RUInsk7CIzpGBXzT0MkSr0u1sFSYeygMwESho8TZM62Q4JOwy3dAKYvEWJWIfjnf1TTnQoIF+W70P2zKwcqPSR2V8TXCDmF8iOgc7gzOBPmZqTxNg6MBoZ2TZYBpXyf4hF9IYDQTIbqKS3APdiaHgDYw6ohts2aYmDbLtwdqm2nCg69OASbJBVxUM10ZuhC5NkRwPU1w0=-----END CERTIFICATE-----
3、-storepasswd(更改密钥库的存储口令)
可用选项:
-new 新口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出
示例:修改密钥库密码
keytool -storepasswd -new 111111 -keystore acton.keystore -storepass 123456
注意:密钥至少为6位
4、-changealias(更改条目的别名)
可用项目:
-alias 要处理的条目的别名 -destalias 目标别名 -keypass 密钥口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
示例:修改acton为newacton
keytool -changealias -alias acton -destalias newacton -keystore acton.keystore -storepass 123456
5、-delete(删除条目)
可用选项:
-alias 要处理的条目的别名 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
示例:删除acton条目
keytool -delete -alias acton -keystore acton.keystore -storepass 123456
6、-exportcert(导出证书)
可用选项:
-rfc 以 RFC 样式输出 -alias 要处理的条目的别名 -file 输出文件名 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
示例:
keytool -exportcert -alias acton -keystore acton.keystore -storepass 123456 -file acton.cer -rfc
- alias:指定别名acton
- keystore:指定密钥库acton.keystore
- storepass:指定密钥库密码
- file:指定输出的证书文件acton.cer
- rfc:指定以Base64编码格式输出
7、-printcert(打印证书内容)
可用选项:
-rfc 以 RFC 样式输出 -file 输入文件名 -sslserver SSL 服务器主机和端口 -jarfile 已签名的 jar 文件 -v 详细输出
示例:
keytool -printcert -file acton.cer
所有者: CN=acton, OU=acton, O=acton, L=BJ, ST=BJ, C=CN发布者: CN=acton, OU=acton, O=acton, L=BJ, ST=BJ, C=CN序列号: 28ab6921有效期为 Mon Nov 27 17:22:38 CST 2023 至 Sun Jun 21 17:22:38 CST 2122证书指纹: MD5: 20:DC:B9:57:65:B1:77:FE:07:33:D6:7B:BE:E5:4A:AC SHA1: 00:1A:D4:2A:A9:F0:56:D7:33:41:4D:05:BA:8A:6B:7E:E4:E7:7D:12 SHA256: 38:0F:24:D3:FA:E4:49:D6:D2:B8:E7:84:ED:4A:86:D2:93:4E:9E:5D:56:EA:6F:9F:C3:E9:85:3A:14:F9:E2:AE签名算法名称: SHA1withRSA主体公共密钥算法: 2048 位 RSA 密钥版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 07 F6 FF 44 6D CB 88 E1 64 5C BD 09 FB 3D 83 31 ...Dm...d\...=.10010: B0 63 5B D5 .c[.]]
示例:Base64编码打印
keytool -printcert -file acton.cer -rfc
-----BEGIN CERTIFICATE-----MIIDTzCCAjegAwIBAgIEKKtpITANBgkqhkiG9w0BAQUFADBXMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxCzAJBgNVBAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwGA1UECxMFYWN0b24xDjAMBgNVBAMTBWFjdG9uMCAXDTIzMTEyNzA5MjIzOFoYDzIxMjIwNjIxMDkyMjM4WjBXMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxCzAJBgNVBAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwGA1UECxMFYWN0b24xDjAMBgNVBAMTBWFjdG9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr//MAh/T/i6L7zDE9qi33zy0e06Se/c+17xFrTbRSTqQaO9xu57ht7lSgV0DnnrbwLnApKevHttjmSOAYOo1hhQwwHNCwd07GtU+x4T0LMwReJH78xlQGegMA5ffhDMR0SF47/oygPsyHUKNh6Ynw/5n+LAwU5LYm0eiE4GNj25T/E4hy9TNqMZI8jj3L3WUAgRXhn3aXlhsGQxVFxac0QoVhuNXGac7q9kTe7CvUzWU7RGf9Mg/CbDvn0MuUbk67Hw1VSEbLcC61BTV7p1xpfJc2vHnRfrLM96/U0XTiJM2V4MGxP7Qe+JDWos6Mnxtm+kUOWb+ZaXhg385SHNvnwIDAQABoyEwHzAdBgNVHQ4EFgQUB/b/RG3LiOFkXL0J+z2DMbBjW9UwDQYJKoZIhvcNAQEFBQADggEBAGsaAW70ru1tSnEN7g6mbRvtsWXdUNz2z90DdOISVritufz3xlgKWWKMUNwTAjooSFaj3go9bCDhULd49+Y6mrkhcVzgkOx7q67nFl44B2mgXvOjzBQ8zhzwzZDNfGhwVShUm9nNNE0J4ucqbV9a600ce3nF2SD8jICbJ5mWx2437+j0ki9uhPPm7ryl7v8r/RAX4rXdcy6oqS/UqH+1FMU0qbHzFO7ZB9DVn0vJp5RnatcUqC+s9dKvkP3orShmrpx8aoGWfjdkR1w9C8Rz9D9gVRYN46X655DzkClh5j5XuMzZVwcIUazC83LRbldee4U90vFUdVOGccoGbzcpWCw=-----END CERTIFICATE-----
8、-certreq(生成证书请求)
可用选项:
-alias 要处理的条目的别名 -sigalg 签名算法名称 -file 输出文件名 -keypass 密钥口令 -keystore 密钥库名称 -dname 唯一判别名 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
示例:
keytool -certreq -alias acton -keystore acton.keystore -storepass 123456 -file acton.csr -v
执行上述命令后,将得到一个PKCS#10编码格式的数字证书签发申请文件acton.csr。
9、-printcertreq(打印证书请求的内容)
可用选项:
-file 输入文件名 -v 详细输出
示例:
keytool -printcertreq -file acton.csr -v
PKCS #10 证书请求 (版本 1.0)主体: CN=acton, OU=acton, O=acton, L=BJ, ST=BJ, C=CN格式: X.509公共密钥: 2048 位 RSA 密钥签名算法: SHA256withRSA扩展请求:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 07 F6 FF 44 6D CB 88 E1 64 5C BD 09 FB 3D 83 31 ...Dm...d\...=.10010: B0 63 5B D5 .c[.]]
后续可以提交CSR文件内容给CA机构,获得相应的签发数字证书。
10、-gencert(根据证书请求生成证书)
可用选项:
-rfc 以 RFC 样式输出 -infile 输入文件名 -outfile 输出文件名 -alias 要处理的条目的别名 -sigalg 签名算法名称 -dname 唯一判别名 -startdate 证书有效期开始日期/时间 -ext X.509 扩展 -validity 有效天数 -keypass 密钥口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出 -protected 通过受保护的机制的口令
示例:正常的CA签发证书需要收费,所以我们只能用acton.keystore密钥库中的acton的私钥来签发acton.csr,自己给自己签发证书
keytool -gencert -infile acton.csr -outfile acton_sign.cer -alias acton -keystore acton.keystore -storepass 123456
生成了签发完毕的证书文件acton_sign.cer。
11、-importcert(导入证书或证书链)
可用选项:
-noprompt 不提示 -trustcacerts 信任来自 cacerts 的证书 -protected 通过受保护的机制的口令 -alias 要处理的条目的别名 -file 输入文件名 -keypass 密钥口令 -keystore 密钥库名称 -storepass 密钥库口令 -storetype 密钥库类型 -providername 提供方名称 -providerclass 提供方类名 -providerarg 提供方参数 -providerpath 提供方类路径 -v 详细输出
示例:将自己签发完毕的acton_sign.cer导入到密钥库
keytool -importcert -trustcacerts -alias acton_sign -file acton_sign.cer -keystore acton.keystore -storepass 123456
所有者: CN=acton, OU=acton, O=acton, L=BJ, ST=BJ, C=CN发布者: CN=acton, OU=acton, O=acton, L=BJ, ST=BJ, C=CN序列号: 342dcb68有效期为 Mon Nov 27 19:51:00 CST 2023 至 Sun Feb 25 19:51:00 CST 2024证书指纹: MD5: FF:A5:4B:71:FD:3B:E2:CC:F3:51:CD:FE:08:A9:3B:D4 SHA1: 21:2B:9F:12:14:75:0E:A8:EA:CB:C8:C9:F6:88:B7:45:D9:3D:CD:24 SHA256: B4:53:E6:DD:B4:6E:3D:2B:28:26:66:8B:4F:60:B0:FB:D2:27:90:7E:EC:7A:C5:FB:1E:06:13:7C:2F:23:7F:18签名算法名称: SHA256withRSA主体公共密钥算法: 2048 位 RSA 密钥版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=falseSubjectKeyIdentifier [KeyIdentifier [0000: 26 D3 0B CF F3 C5 E7 A0 60 39 F1 C9 8C C5 73 C9 &.......`9....s.0010: EC 66 5A 36 .fZ6]]是否信任此证书? [否]: y证书已添加到密钥库中
查看密钥库内容:
keytool -list -keystore acton.keystore -storepass 123456
密钥库类型: jks密钥库提供方: SUN您的密钥库包含 2 个条目acton_sign, 2023-11-27, trustedCertEntry,证书指纹 (SHA1): 21:2B:9F:12:14:75:0E:A8:EA:CB:C8:C9:F6:88:B7:45:D9:3D:CD:24acton, 2023-11-27, PrivateKeyEntry,证书指纹 (SHA1): 86:43:64:83:AC:3A:AE:F1:9D:BB:CE:E5:C1:07:8C:A5:2A:F0:4E:3E