JDK 自带 keytool 生成免费证书

  • 1. 生成证书 存到 密钥库
  • keytool -genkey
  • 示例
  • 2. 查看证书
  • keytool -list
  • 示例
  • 1. 详细输出
  • 2. 以 RFC 样式输出
  • 3. 导出证书
  • keytool -exportcert
  • 示例
  • 4. keytool
  • keytool -help


1. 生成证书 存到 密钥库

keytool -genkey

D:\JDK8_64\bin>keytool -genkey -help
keytool -genkeypair [OPTION]...

生成密钥对

选项:

 -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 -help" 获取所有可用命令

示例

生成一个别名为jerryKey的证书,该证书存放在名为D:/jerry.keystore的密钥库中,若密钥库不存在则创建。

keytool -genkey jerryKey -keyalg RSA -keysize 1024 -dname "CN=www.jerryjin.com, OU=单位名称, O=久耐科技, L=湘西, ST=湖南, C=CN" -validity 365 -keypass 123456 -keystore D:/jerry.keystore -storepass 123456

2. 查看证书

keytool -list

D:\JDK8_64\bin>keytool -list -help
keytool -list [OPTION]...

列出密钥库中的条目

选项:

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

使用 "keytool -help" 获取所有可用命令

示例

1. 详细输出

keytool -list D:/jerry.keystore -storepass 123456

输出结果:

D:\JDK8_64\bin>keytool -list -v -keystore D:/jerry.keystore -storepass 123456

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: jerryKey
创建日期: 2021-1-14
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=www.jerryjin.com, OU=单位名称, O=久耐科技, L=湘西, ST=湖南, C=CN
发布者: CN=www.jerryjin.com, OU=单位名称, O=久耐科技, L=湘西, ST=湖南, C=CN
序列号: 1dfecc87
有效期开始日期: Thu Jan 14 19:27:23 CST 2021, 截止日期: Fri Jan 14 19:27:23 CST 2022
证书指纹:
         MD5: 7A:D3:20:4D:DF:21:88:A4:38:17:BE:AB:78:EB:4F:D4
         SHA1: 5B:AA:79:BE:87:A5:8C:C7:05:2C:F9:00:56:59:E6:C1:60:3F:BF:B4
         SHA256: B7:E4:B6:57:5E:99:43:C0:94:A0:CF:9E:2D:E5:E0:74:58:B6:0E:DD:2E:CF:4A:EF:07:B1:B3:FB:14:B0:08:98
         签名算法名称: SHA256withRSA
         版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 81 90 6B 17 EE 5D 49 4B   F1 14 CC 67 1D 2D C7 01  ..k..]IK...g.-..
0010: E1 97 4E DB                                        ..N.
]
]

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

2. 以 RFC 样式输出

keytool -list D:/jerry.keystore -storepass 123456

输出结果:

D:\JDK8_64\bin>keytool -list -rfc -keystore D:/jerry.keystore -storepass 123456

密钥库类型: JKS
密钥库提供方: SUN

您的密钥库包含 1 个条目

别名: jerryKey
创建日期: 2021-1-14
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
-----BEGIN CERTIFICATE-----
MIICWjCCAcOgAwIBAgIEHf7MhzANBgkqhkiG9w0BAQsFADBgMQswCQYDVQQGEwJDTjEQMA4GA1UECBMHeGlhbmd4aTEOMAwGA1UEBxMFaHVuYW4xDDAKBgNVBAoTA3poYjEOMAwGA1UECxMFenJ6eWoxETAPBgNVBAMTCGplcnJ5amluMB4XDTIxMDExNDExMjcyM1oXDTIyMDExNDExMjcyM1owYDELMAkGA1UEBhMCQ04xEDAOBgNVBAgTB3hpYW5neGkxDjAMBgNVBAcTBWh1bmFuMQwwCgYDVQQKEwN6aGIxDjAMBgNVBAsTBXpyenlqMREwDwYDVQQDEwhqZXJyeWppbjCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsZCzvwpsAvRP5XhGRp2JR0TD/b9luSL0hryCG+/GXXbQIMGq5Z6zBGBEmbxLAB/0I4Yk3qeFBEjhHOFRuCpDm3E7ZnuqF0G0vfsloSXkOu7r58plxAcfUVOm4iFHD1C1ZMfWI/01mOPy+7QGBeH15g0uS3ibkL04Kj7dEIB/m20CAwEAAaMhMB8wHQYDVR0OBBYEFIGQaxfuXUlL8RTMZx0txwHhl07bMA0GCSqGSIb3DQEBCwUAA4GBAEMQxpjt6rvp0gjtCvhOc/oGpZPURCy/ZX5jLJOxdqBgNHLnNxIVZtRpkXgWpjC53PG4Lqr4Wf+27jsE/IBN+r4e45kdBZYKvkOCLAtfAGnIQaom0rK7ETedo4DC8hYV7J9Il4y1FrzpRwGo1mmUSLL+HJxX5B43zGTqmxP3kRx3
-----END CERTIFICATE-----
*******************************************
*******************************************

3. 导出证书

keytool 导出证书,并无私钥。不如直接将D:/jerry.keystore导入KeyManager,然后就可以导出需要的格式了

keytool -exportcert

D:\JDK8_64\bin>keytool -exportcert -help
keytool -exportcert [OPTION]...

导出证书

选项:

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

使用 "keytool -help" 获取所有可用命令

示例

从密钥库D:/jerry.keystore中导出一个别名为jerryKey的证书D:/jerryKey.crt

keytool -exportcert jerryKey -keystore D:/jerry.keystore -file D:/jerryKey.crt -keypass 123456 -storepass 123456

4. keytool

keytool -help

D:\JDK8_64\bin>keytool -help
密钥和证书管理工具

命令:

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

使用 "keytool -command_name -help" 获取 command_name 的用法