Java——Keytool工具详解

Keytool

keytool为java原生自带,安装java后不需要再进行安装,作为密钥和证书管理工具,方便用户能够管理自己的公钥/私钥及证书,用于认证服务。

  • -certreq:生成证书请求
  • -changealias:更改条目的别名
  • -delete:删除条目
  • -exportcert:导出证书
  • -genkeypair:生成密钥对
  • -genseckey:生成密钥
  • -gencert:根据证书请求生成证书
  • -importcert:导入证书或证书链
  • -importpass:导入口令
  • -importkeystore:从其他密钥库导入一个或所有条目
  • -keypasswd:更改条目的密钥口令
  • -list:列出密钥库中的条目
  • -printcert:打印证书内容
  • -printcertreq:打印证书请求的内容
  • -printcrl:打印 CRL 文件的内容
  • -storepasswd:更改密钥库的存储口令

1、-genkeypair(生成密钥对/创建数字证书)

可用选项:

 -alias <alias>                  要处理的条目的别名
 -keyalg <keyalg>                密钥算法名称
 -keysize <keysize>              密钥位大小
 -sigalg <sigalg>                签名算法名称
 -destalias <destalias>          目标别名
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -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 <alias>                  要处理的条目的别名
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -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-----
MIIDTzCCAjegAwIBAgIEOLT4rDANBgkqhkiG9w0BAQUFADBXMQswCQYDVQQGEwJD
TjELMAkGA1UECBMCQkoxCzAJBgNVBAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwG
A1UECxMFYWN0b24xDjAMBgNVBAMTBWFjdG9uMCAXDTIzMTEyNzA4NTMzN1oYDzIx
MjIwNjIxMDg1MzM3WjBXMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxCzAJBgNV
BAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwGA1UECxMFYWN0b24xDjAMBgNVBAMT
BWFjdG9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk4AyvuJa5Kjn
FMnnOX1Um3m5V9N1kCorETOMEigsym2wamyqrw5cLeaT5al8IS18Qyczu69r0W/e
pW+e5Fsg7T8UsjfQwxt1b+A+E78bHQuPXhC6AznkS/MT5zT50twMseSf+RwuhrlH
0YjKZxsERuIa09h2IoacnNkrAJf/Uh6PKl1otIoMKpE1uq9czo/q+UgJr0ruvajV
9Z4pdvMH04rMcYtEnhHgOj5q9F4XWKHPltx5DRcEdv2dNVmBNDaMOtkRrkj2L0IM
IwyiknqhNoz2JWUVrmButg3xesvK+U1jAoYA1I5p57OJuCkvGsrPLJs5sJO55F6z
M4R8nn1j4wIDAQABoyEwHzAdBgNVHQ4EFgQUdbb+w+9kBVu9Wz6RZghPJL6LN80w
DQYJKoZIhvcNAQEFBQADggEBAIqbMLrOgWOOmPpLEE2jDjcBCLc1LTkCCEdmarUo
2Y+Fk7B3zseN1YRsWxpHx5V5UVmcdncfDQY0WRz+S7dBkIH9TyDTNVCkqKppZsLl
ZuIavsbZXHWr6GZb3FB8fhj7GhaqZ/HSh0qNL1RUInsk7CIzpGBXzT0MkSr0u1sF
SYeygMwESho8TZM62Q4JOwy3dAKYvEWJWIfjnf1TTnQoIF+W70P2zKwcqPSR2V8T
XCDmF8iOgc7gzOBPmZqTxNg6MBoZ2TZYBpXyf4hF9IYDQTIbqKS3APdiaHgDYw6o
hts2aYmDbLtwdqm2nCg69OASbJBVxUM10ZuhC5NkRwPU1w0=
-----END CERTIFICATE-----

3、-storepasswd(更改密钥库的存储口令)

可用选项:

 -new <arg>                      新口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出

示例:修改密钥库密码

keytool -storepasswd -new 111111 -keystore acton.keystore -storepass 123456

注意:密钥至少为6位

4、-changealias(更改条目的别名)

可用项目:

 -alias <alias>                  要处理的条目的别名
 -destalias <destalias>          目标别名
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

示例:修改acton为newacton

keytool -changealias -alias acton -destalias newacton -keystore acton.keystore -storepass 123456

5、-delete(删除条目)

可用选项:

 -alias <alias>                  要处理的条目的别名
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

示例:删除acton条目

keytool -delete -alias acton -keystore acton.keystore -storepass 123456

6、-exportcert(导出证书)

可用选项:

 -rfc                            以 RFC 样式输出
 -alias <alias>                  要处理的条目的别名
 -file <filename>                输出文件名
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -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 <filename>            输入文件名
 -sslserver <server[:port]>  SSL 服务器主机和端口
 -jarfile <filename>         已签名的 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=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 07 F6 FF 44 6D CB 88 E1   64 5C BD 09 FB 3D 83 31  ...Dm...d\...=.1
0010: B0 63 5B D5                                        .c[.
]
]

示例:Base64编码打印

keytool -printcert -file acton.cer -rfc
-----BEGIN CERTIFICATE-----
MIIDTzCCAjegAwIBAgIEKKtpITANBgkqhkiG9w0BAQUFADBXMQswCQYDVQQGEwJD
TjELMAkGA1UECBMCQkoxCzAJBgNVBAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwG
A1UECxMFYWN0b24xDjAMBgNVBAMTBWFjdG9uMCAXDTIzMTEyNzA5MjIzOFoYDzIx
MjIwNjIxMDkyMjM4WjBXMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxCzAJBgNV
BAcTAkJKMQ4wDAYDVQQKEwVhY3RvbjEOMAwGA1UECxMFYWN0b24xDjAMBgNVBAMT
BWFjdG9uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr//MAh/T/i6L
7zDE9qi33zy0e06Se/c+17xFrTbRSTqQaO9xu57ht7lSgV0DnnrbwLnApKevHttj
mSOAYOo1hhQwwHNCwd07GtU+x4T0LMwReJH78xlQGegMA5ffhDMR0SF47/oygPsy
HUKNh6Ynw/5n+LAwU5LYm0eiE4GNj25T/E4hy9TNqMZI8jj3L3WUAgRXhn3aXlhs
GQxVFxac0QoVhuNXGac7q9kTe7CvUzWU7RGf9Mg/CbDvn0MuUbk67Hw1VSEbLcC6
1BTV7p1xpfJc2vHnRfrLM96/U0XTiJM2V4MGxP7Qe+JDWos6Mnxtm+kUOWb+ZaXh
g385SHNvnwIDAQABoyEwHzAdBgNVHQ4EFgQUB/b/RG3LiOFkXL0J+z2DMbBjW9Uw
DQYJKoZIhvcNAQEFBQADggEBAGsaAW70ru1tSnEN7g6mbRvtsWXdUNz2z90DdOIS
Vritufz3xlgKWWKMUNwTAjooSFaj3go9bCDhULd49+Y6mrkhcVzgkOx7q67nFl44
B2mgXvOjzBQ8zhzwzZDNfGhwVShUm9nNNE0J4ucqbV9a600ce3nF2SD8jICbJ5mW
x2437+j0ki9uhPPm7ryl7v8r/RAX4rXdcy6oqS/UqH+1FMU0qbHzFO7ZB9DVn0vJ
p5RnatcUqC+s9dKvkP3orShmrpx8aoGWfjdkR1w9C8Rz9D9gVRYN46X655DzkClh
5j5XuMzZVwcIUazC83LRbldee4U90vFUdVOGccoGbzcpWCw=
-----END CERTIFICATE-----

8、-certreq(生成证书请求)

可用选项:

 -alias <alias>                  要处理的条目的别名
 -sigalg <sigalg>                签名算法名称
 -file <filename>                输出文件名
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -dname <dname>                  唯一判别名
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -v                              详细输出
 -protected                      通过受保护的机制的口令

示例:

keytool -certreq -alias acton -keystore acton.keystore -storepass 123456 -file acton.csr -v

执行上述命令后,将得到一个PKCS#10编码格式的数字证书签发申请文件acton.csr。

9、-printcertreq(打印证书请求的内容)

可用选项:

 -file <filename>  输入文件名
 -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=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 07 F6 FF 44 6D CB 88 E1   64 5C BD 09 FB 3D 83 31  ...Dm...d\...=.1
0010: B0 63 5B D5                                        .c[.
]
]

后续可以提交CSR文件内容给CA机构,获得相应的签发数字证书。

10、-gencert(根据证书请求生成证书)

可用选项:

 -rfc                            以 RFC 样式输出
 -infile <filename>              输入文件名
 -outfile <filename>             输出文件名
 -alias <alias>                  要处理的条目的别名
 -sigalg <sigalg>                签名算法名称
 -dname <dname>                  唯一判别名
 -startdate <startdate>          证书有效期开始日期/时间
 -ext <value>                    X.509 扩展
 -validity <valDays>             有效天数
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -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 <alias>                  要处理的条目的别名
 -file <filename>                输入文件名
 -keypass <arg>                  密钥口令
 -keystore <keystore>            密钥库名称
 -storepass <arg>                密钥库口令
 -storetype <storetype>          密钥库类型
 -providername <providername>    提供方名称
 -providerclass <providerclass>  提供方类名
 -providerarg <arg>              提供方参数
 -providerpath <pathlist>        提供方类路径
 -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=false
SubjectKeyIdentifier [
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:24
acton, 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值