Java 工具集教程

keytool.exe 管理密钥库和证书

keytool 是 Java 开发工具包(JDK)中的一个命令行工具,用于管理密钥库(keystore)和证书。它可以用于生成密钥对、创建数字证书请求(CSR)、导入/导出证书和私钥等操作。

直接打开终端,输入 keytool 命令查看命令的帮助信息,如下图:

be28a4b72094ebea4957664018604823_1719812699211-125ed0d5-4843-4063-93e2-b30a01120e2d.png

上图中,keytool 返回了很多子命令,每个子命令还包含属于自己的选项,可以通过“keytool 子命令 -help”的方式获取具体子命令的帮助信息,例如:

# 查看 -certreq 子命令帮助信息
keytool -certreq -help

keytool -genkeypair 命令

keytool -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  通过受保护的机制的口令

示例:

(1)该示例将生成一个别名为 mykey 的密钥对,并将其存储在名为 keystore.jks 的密钥库中。例如:

keytool -genkeypair -alias mykey -keyalg RSA -keystore keystore.jks

参数说明:

  • -alias mykey :为生成的密钥对指定一个别名,这里是 mykey ,方便后续引用。

  • -keyalg RSA:指定密钥算法为 RSA 。

  • -keystore keystore.jks:指定生成的密钥库文件的名称。

执行上述命令如下:

C:\Users\Administrator> keytool -genkeypair -alias mykey -keyalg RSA -keystore keystore.jks
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
  [Unknown]:  hxstrive.com
您的组织单位名称是什么?
  [Unknown]:  IT
您的组织名称是什么?
  [Unknown]:  hxstrive
您所在的城市或区域名称是什么?
  [Unknown]:  ChengDu
您所在的省/市/自治区名称是什么?
  [Unknown]:  SiChuan
该单位的双字母国家/地区代码是什么?
  [Unknown]:  CN
CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN是否正确?
  [否]:  Y

输入 <mykey> 的密钥口令
        (如果和密钥库口令相同, 按回车):
再次输入新口令:

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

注意,执行上述命令需要用户输入很多信息,如果一个信息输入错误,需要重头再来,我们可以尝试将这些信息直接放入到命令中。

(2)该示例将把创建密钥对的信息放入到命令行,避免命令执行过程中输入过多的信息。例如:

keytool -genkeypair -alias myKeyPair -keyalg RSA -keysize 2048 -validity 3650 -storetype JKS -keystore myKeystore.jks -storepass 123456 -dname "CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN"

参数说明:

  • -alias myKeyPair:为生成的密钥对指定一个别名,这里是 myKeyPair,方便后续引用。

  • -keyalg RSA:指定密钥算法为 RSA 。

  • -keysize 2048:指定密钥长度为 2048 位,增强安全性。

  • -validity 3650:证书的有效期为 3650 天。

  • -storetype JKS:指定密钥库的类型为 JKS 。

  • -keystore myKeystore.jks:指定生成的密钥库文件的名称。

  • -storepass 123456:设置密钥库的密码。

  • -dname "CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN":指定证书的主题信息,包括通用名称(CN)、组织单元(OU)、组织(O)、城市(L)、州/省(ST)和国家(C)。

执行上述命令如下:

C:\Users\Administrator>keytool -genkeypair -alias myKeyPair -keyalg RSA -keysize 2048 -validity 3650 -storetype JKS -keystore myKeystore.jks -storepass 123456 -dname "CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN"
输入 <myKeyPair> 的密钥口令
        (如果和密钥库口令相同, 按回车):
再次输入新口令:

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

keytool -certreq 命令

keytool -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  通过受保护的机制的口令

示例:

(1)该示例将为 mykey 密钥对创建一个证书请求,并将其存储在名为 mykey.csr 的文件中。例如:

keytool -certreq -alias mykey -keystore keystore.jks -file mykey.csr

参数说明:

  • -alias mykey  指定密钥对的别名,这里是 mykey。

  • -keystore keystore.jks  指定密钥库文件为 keystore.jks。

  • -file mykey.csr  指定证书文件名,这里是 mykey.csr。

执行上述命令如下:

C:\Users\Administrator> keytool -certreq -alias mykey -keystore keystore.jks -file mykey.csr
输入密钥库口令:

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

注意:上述命令中的 keystore.jks 文件是提前通过 keytool -genkeypair 命令创建的密钥库。如果 keystore.jks 不存在,将输出如下错误信息:

C:\Users\Administrator> keytool -certreq -alias mykey -keystore keystore.jks -file mykey.csr
keytool 错误: java.lang.Exception: 密钥库文件不存在: keystore.jks

(2)该示例将更多生成证书的信息通过参数进行指定,避免过多的输入。例如:

keytool -certreq -alias mykey -sigalg SHA256withRSA -file mykey.csr -keypass 123456 -keystore keystore.jks -dname "CN=hxstrive.com,OU=IT,O=hxstrive,L=ChengDu,ST=SiChuan,C=CN" -storepass 123456

参数说明:

  • -alias mykey  指定密钥对的别名,这里是 mykey。

  • -sigalg SHA256withRSA  指定签名算法,这里是 SHA256withRSA。

  • -file mykey.csr  指定生成的证书请求文件的名称,这里是  myCertReq.csr。

  • -keypass 123456  指定密钥口令,这里是 123456。

  • -keystore keystore.jks  指定密钥库名称,这里是 keystore.jks。

  • -dname "CN=hxstrive.com,OU=IT,O=hxstrive,L=ChengDu,ST=SiChuan,C=CN"  指定证书信息,具体信息需要根据实际情况填写,如个人或组织的名称、城市、州/省、国家等。生成的证书请求文件(.csr 文件)通常会提交给证书颁发机构(CA),以获取由 CA 签名的数字证书。CA 会验证请求中的信息,并根据其策略和流程颁发相应的证书。获得签名后的证书后,可以使用 importcert 命令将其导入到密钥库中。

  • -storepass 123456 指定密钥库口令,这里是 123456。

执行上述命令如下:

C:\Users\Administrator>keytool -certreq -alias mykey -sigalg SHA256withRSA -file mykey.csr -keypass 123456 -keystore keystore.jks -dname "CN=hxstrive.com,OU=IT,O=hxstrive,L=ChengDu,ST=SiChuan,C=CN" -storepass 123456

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

keytool -changealias 命令

keytool -changealias 命令用于更改密钥库中条目的别名,语法如下:

keytool -changealias -keystore <keystore_file> -alias <old_alias> -destalias <new_alias>

参数说明:

  • -keystore <keystore_file>  指定要操作的密钥库文件的路径。

  • -alias <old_alias>  要更改的旧别名。

  • -destalias <new_alias>  新的别名。

该命令还支持更多选项:

  • -keypass <arg>  密钥口令

  • -storepass <arg>  密钥库口令

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

  • -protected  通过受保护的机制的口令

示例:

如果您想将密钥库 mykeystore.jks 中别名 mykey 更改为 mykey2,可以执行以下命令:

keytool -changealias -keystore keystore.jks -alias mykey -destalias mykey2

执行过程如下:

C:\Users\Administrator> keytool -changealias -keystore keystore.jks -alias mykey -destalias mykey2
输入密钥库口令:

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

最后,你也可以使用 -storepass 选项指定密钥库的密码,例如:

keytool -changealias -keystore keystore.jks -alias mykey2 -destalias mykey -storepass 123456

keytool -delete 命令

keytool -delete 命令用于从密钥库中删除条目。语法如下:

keytool -delete -alias <alias_name> -keystore <keystore_file> -storepass <password>

参数说明:

  • -alias <alias_name>  指定要删除的条目的别名。

  • -keystore <keystore_file>  指定要操作的密钥库文件。

  • -storepass <password>  指定密钥库的密码。

该命令还支持更多选项:

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

  • -protected  通过受保护的机制的口令

示例:

删除 keystore.jks 密钥库中的 myKey 条目,例如:

keytool -delete -alias myKey -keystore keystore.jks -storepass 123456

执行过程如下:

C:\Users\Administrator> keytool -delete -alias myKey -keystore keystore.jks -storepass 123456

keytool -exportcert 命令

keytool -exportcert 命令用于从密钥库中导出证书。语法如下:

keytool -exportcert -alias <alias_name> -keystore <keystore_file> -file <cert_file> -storepass <password>

参数说明:

  • -alias <alias_name>  指定要导出的证书的别名。

  • -keystore <keystore_file>  指定密钥库文件的路径。

  • -file <cert_file>  指定导出证书的保存路径和文件名。

  • -storepass <password>  指定密钥库的密码。

更多选项如下:

  • -rfc  以 RFC 样式输出

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

  • -protected  通过受保护的机制的口令

示例:

该示例将 keystore.jks 密钥库中的 mykey 条目导出为 myCert.cer 证书,例如:

keytool -exportcert -alias myKey -keystore keystore.jks -file myCert.cer -storepass 123456

执行过程如下:

C:\Users\Administrator>keytool -exportcert -alias myKey -keystore keystore.jks -file myCert.cer -storepass 123456
存储在文件 <myCert.cer> 中的证书

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

keytool -genseckey 命令

keytool -genseckey 命令用于生成密钥,语法如下:

keytool -genseckey -alias <alias_name> -keypass <key_password> -keyalg <key_algorithm> -keysize <key_size> -keystore <keystore_file> -storepass <store_password> [-providerName <provider_name>] [-providerClass <provider_class_name> {-providerArg <provider_arg>}] [-v] [-protected]

参数说明:

  • -alias <alias_name>  指定密钥的别名,用于在密钥库中标识该密钥

  • -keypass <key_password>  指定密钥的密码

  • -keyalg <key_algorithm>  指定密钥算法,如 DES、AES 等

  • -keysize <key_size>  指定密钥的大小(位数)

  • -keystore <keystore_file>  指定密钥库文件的路径

  • -storepass <store_password>  指定密钥库的密码

  • -providerName <provider_name>  提供方名称(可选)

  • -providerClass <provider_class_name>  提供方类名(可选)

  • -providerArg <provider_arg>  提供方参数(可选)

  • -v  详细输出模式,显示更多关于密钥生成过程的信息

  • -protected  通过受保护的机制输入口令(可选)

  • -storetype <storetype>  密钥库类型

  • -providerpath <pathlist>  提供方类路径

示例:

keytool -genseckey -alias mySecretKey -keyalg AES -keysize 128 -keystore keystore.jks -storepass 123456 -keypass 123456

参数说明:

  • -alias mySecretKey :指定生成的密钥的别名是 mySecretKey

  • -keyalg AES :指定密钥算法为 AES

  • -keysize 128 :指定密钥大小为 128 位

  • -keystore keystore.jks  指定密钥库文件为 keystore.jks

  • -storepass 123456 指定密钥库的密码是 123456

  • -keypass 123456  指定密钥的密码是 123456

执行过程如下:

C:\Users\Administrator>keytool -genseckey -alias mySecretKey -keyalg AES -keysize 128 -keystore myKeystore.jks -storepass 123456 -keypass 123456
keytool 错误: java.security.KeyStoreException: Cannot store non-PrivateKeys

当你看到错误 java.security.KeyStoreException: Cannot store non-PrivateKeys 时,意味着你试图将一个非私钥(non-private key)存储到密钥库中,但是密钥库通常只接受私钥及其相关的证书链。

导致上述错误的原因:Java 默认的密钥库类型为 JKS, 除这种类型外,还有 PKCS12、JCEKS 两种类型,要存储 Secret Key 要使用 JCEKS 类型,另外两种不支持。

修改命令如下:

keytool -genseckey -alias mySecretKey -keyalg AES -keysize 128 -keystore keystore.jks -storepass 123456 -keypass 123456 -storetype jceks

执行过程如下:

C:\Users\Administrator>keytool -genseckey -alias mySecretKey -keyalg AES -keysize 128 -keystore keystore.jks -storepass 123456 -keypass 123456 -storetype jceks

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

keytool -gencert 命令

keytool -gencert 命令用于根据证书请求生成证书。它需要一个证书请求文件(.csr 文件)作为输入,并使用指定的密钥库中的私钥对其进行签名,从而生成相应的证书(.cer 文件或其他格式的证书文件)。

语法如下:

keytool -gencert -alias <signer_alias> -keystore <signer_keystore> -infile <certificate_request_file> -outfile <certificate_file> [-storepass <keystore_password>] [-validity <days>]

参数说明:

  • -alias <signer_alias> 指定用于签名的私钥的别名,该私钥必须存在于指定的密钥库中

  • -keystore <signer_keystore> 指定包含用于签名的私钥的密钥库文件的路径

  • -infile <certificate_request_file> 指定要签名的证书请求文件(.csr 文件)的路径

  • -outfile <certificate_file> 指定生成的证书文件的输出路径和文件名

  • -storepass <keystore_password> 指定密钥库的密码(如果密钥库有密码保护)

  • -validity <days> 可选参数,指定生成的证书的有效天数

更多选项:

  • -rfc  以 RFC 样式输出

  • -sigalg <sigalg>  签名算法名称

  • -dname <dname>  唯一判别名

  • -startdate <startdate>  证书有效期开始日期/时间

  • -ext <value>  X.509 扩展

  • -keypass <arg>  密钥口令

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

  • -protected  通过受保护的机制的口令

示例:

(1)生成 keystore.jks 文件,如下:

keytool -genkeypair -alias myKey -keyalg RSA -keysize 2048 -validity 3650 -storetype JKS -keystore keystore.jks -storepass 123456 -dname "CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN"

(2)利用上面步骤输出的 keystore.jks 文件生成 server.csr 文件,如下:

keytool -certreq -alias myKey -keystore keystore.jks -file server.csr

(3)生成 server.cer 文件,使用名为 myKey 的私钥对证书请求文件 server.csr 进行签名,并将生成的证书保存为 server.cer,密钥库密码为 123456,证书有效期为 365 天,可以使用以下命令。

keytool -gencert -alias ca -keystore ca.keystore -infile server.csr -outfile server.cer -storepass 123456 -validity 365

执行上述命令后,将根据证书请求文件生成一个经过签名的证书,并将其保存到指定的输出文件中。该证书可以用于各种需要证书的场景,例如 SSL/TLS 通信等。

keytool -importcert 命令

keytool -importcert 命令用于将证书导入到密钥库中。语法如下:

keytool -importcert -alias <alias_name> -file <certificate_file> -keystore <keystore_file> -storepass <password> [-noprompt]

参数说明:

  • -alias <alias_name>  为导入的证书指定一个别名,以便在密钥库中识别

  • -file <certificate_file>  要导入的证书文件的路径

  • -keystore <keystore_file>  指定目标密钥库文件的路径

  • -storepass <password>  密钥库的密码

  • -noprompt  如果添加此选项,将不会提示确认操作,直接执行导入

更多选项:

  • -trustcacerts  信任来自 cacerts 的证书

  • -protected  通过受保护的机制的口令

  • -keypass <arg>  密钥口令

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

示例:

下面示例将 server.cer 证书导入到 keystore.jks 密钥库中,并且设置别名为 myKey2。如下:

keytool -importcert -alias myKey2 -file server.cer -keystore keystore.jks -storepass 123456

执行过程如下:

C:\Users\Administrator>keytool -importcert -alias myKey2 -file server.cer -keystore keystore.jks -storepass 123456
所有者: CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN
发布者: CN=hxstrive.com, OU=IT, O=hxstrive, L=ChengDu, ST=SiChuan, C=CN
序列号: 665b20e7
有效期为 Mon Jul 01 17:07:04 CST 2024 至 Tue Jul 01 17:07:04 CST 2025
证书指纹:
         MD5:  8C:B0:4C:CE:A7:14:4D:AC:DE:52:70:24:7A:F6:92:32
         SHA1: DA:BE:47:30:5B:C7:0E:32:6A:75:F8:5E:F1:06:10:E9:73:1A:5A:5C
         SHA256: D8:2D:8D:BE:9B:9C:E1:69:C5:83:6E:0D:5E:17:86:20:38:C6:D1:49:DF:89:35:8D:08:6E:C8:CB:0E:1F:45:2B
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3

扩展:

#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: EF 12 51 12 19 9E 9E 65   98 B5 3D 0F 05 3A D6 D7  ..Q....e..=..:..
0010: 36 51 DF 0C                                        6Q..
]
]

是否信任此证书? [否]:  Y
证书已添加到密钥库中

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

执行上述命令后,将 server.cer 证书文件导入到 keystore.jks 密钥库中,并赋予 myKey2 别名。

keytool -importpass 命令

keytool -importpass 命令用于导入口令。但一般情况下,较少直接使用这个命令。语法如下:

keytool -importpass -alias <alias_name> -keypass <old_key_pass> -new <new_key_pass> -keystore <keystore_file> -storepass <store_pass> [-providerclass <provider_class_name>] [-providerarg <provider_arg>]

参数说明:

  • -alias <alias_name>  指定密钥库中条目的别名

  • -keypass <old_key_pass>  当前条目的旧密钥口令

  • -new <new_key_pass>  要设置的新密钥口令

  • -keystore <keystore_file>  指定密钥库文件的路径

  • -storepass <store_pass>  密钥库的存储口令

  • -providerclass <provider_class_name>  指定提供程序的类名(可选)

  • -providerarg <provider_arg>  提供程序的参数(可选)

更多选项:

  • -keyalg <keyalg>  密钥算法名称

  • -keysize <keysize>  密钥位大小

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

  • -protected  通过受保护的机制的口令

示例:

要将别名名为 myKey1 的条目密钥口令更新为新口令 aaaaaa,密钥库文件为 keystore.jks,其存储口令为 123456,可使用以下命令:

keytool -importpass -alias myKey2 -keypass 123456 -new aaaaaa -keystore keystore.jks -storepass 123456

keytool -importkeystore 命令

keytool -importkeystore 命令用于将一个密钥库的内容导入到另一个密钥库中,或者将密钥库从一种格式转换为另一种格式。语法如下:

keytool -importkeystore -srckeystore <source_keystore> -destkeystore <destination_keystore> [-srcstoretype <source_store_type>] [-deststoretype <destination_store_type>] [-srcstorepass <source_store_password>] [-deststorepass <destination_store_password>] [-srcalias <source_alias>] [-destalias <destination_alias>] [-srckeypass <source_key_password>] [-destkeypass <destination_key_password>] [-noprompt]

参数说明:

  • -srckeystore <source_keystore>:指定源密钥库的路径。

  • -destkeystore <destination_keystore>:指定目标密钥库的路径。

  • -srcstoretype <source_store_type>:指定源密钥库的类型(例如,JKS、PKCS12 等)。

  • -deststoretype <destination_store_type>:指定目标密钥库的类型。

  • -srcstorepass <source_store_password>:源密钥库的密码。

  • -deststorepass <destination_store_password>:目标密钥库的密码。

  • -srcalias <source_alias>:源密钥库中条目的别名。

  • -destalias <destination_alias>:目标密钥库中对应的别名。

  • -srckeypass <source_key_password>:源密钥库中条目的密钥密码。

  • -destkeypass <destination_key_password>:目标密钥库中条目的密钥密码。

  • -noprompt:不提示确认信息,直接执行操作。

选项:

  • -srckeystore <srckeystore>  源密钥库名称

  • -destkeystore <destkeystore>  目标密钥库名称

  • -srcstoretype <srcstoretype>  源密钥库类型

  • -deststoretype <deststoretype>  目标密钥库类型

  • -srcstorepass <arg>  源密钥库口令

  • -deststorepass <arg>  目标密钥库口令

  • -srcprotected  受保护的源密钥库口令

  • -srcprovidername <srcprovidername>  源密钥库提供方名称

  • -destprovidername <destprovidername>  目标密钥库提供方名称

  • -srcalias <srcalias>  源别名

  • -destalias <destalias>  目标别名

  • -srckeypass <arg>  源密钥口令

  • -destkeypass <arg>  目标密钥口令

  • -noprompt  不提示

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

例如,将一个 JKS 格式的源密钥库 source.jks 导入到 PKCS12 格式的目标密钥库 destination.p12 中,源和目标密钥库密码均为 password,可以使用以下命令:

keytool -importkeystore -srckeystore source.jks -destkeystore destination.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass password -deststorepass password

keytool -keypasswd 命令

keytool -keypasswd 命令用于修改密钥库中指定条目(如密钥对)的口令(密码)。语法格式为:

keytool -keypasswd -alias <alias_name> -keypass <old_key_pass> -new <new_key_pass> -storepass <store_pass> -keystore <keystore_file>

参数说明:

  • -alias <alias_name>:指定要修改口令的条目的别名。

  • -keypass <old_key_pass>:当前条目的旧密钥口令。

  • -new <new_key_pass>:要设置的新密钥口令。

  • -storepass <store_pass>:密钥库的存储口令。

  • -keystore <keystore_file>:指定密钥库文件的路径。

更多选项:

  • -alias <alias>  要处理的条目的别名

  • -keypass <arg>  密钥口令

  • -new <arg>  新口令

  • -keystore <keystore>  密钥库名称

  • -storepass <arg>  密钥库口令

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

示例:

要将别名名为 myAlias 的条目密钥口令从旧口令 oldPass 修改为新口令 newPass,密钥库文件为 myKeystore.jks,其存储口令为 storePass,可使用以下命令:

keytool -keypasswd -alias myAlias -keypass oldPass -new newPass -storepass storePass -keystore myKeystore.jks

请注意,在实际使用中不应在命令行中直接明文指定口令,以避免口令泄露。如果没有在命令行上指定口令选项,执行命令时将会提示输入相应的口令。另外,输入口令时,口令通常不会以明文形式显示。同时,请务必妥善保管密钥库和相关口令,以确保安全性。

keytool -list 命令

keytool -list 命令用于列出密钥库中的条目信息。语法格式为:

keytool -list -v -keystore <keystore_file> -storepass <store_password>

参数说明:

  • -v:表示详细输出,会显示更多关于证书的信息。

  • -keystore <keystore_file>:指定要查看的密钥库文件的路径。

  • -storepass <store_password>:指定密钥库的密码。

更多选项:

  • -rfc  以 RFC 样式输出

  • -alias <alias>  要处理的条目的别名

  • -keystore <keystore>  密钥库名称

  • -storepass <arg>  密钥库口令

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

  • -protected  通过受保护的机制的口令

示例:

keytool -list -v -keystore myKeystore.jks -storepass myPassword

执行上述命令后,将显示指定密钥库中的条目详细信息,包括别名、证书所有者、颁发者、有效期等。

keytool -printcert 命令

keytool -printcert 命令用于打印证书的详细信息。语法格式为:

keytool -printcert -file <certificate_file>

参数说明:

  • -file <certificate_file> 指定要打印信息的证书文件的路径。

  • -rfc  以 RFC 样式输出

  • -sslserver <server[:port]>  SSL 服务器主机和端口

  • -jarfile <filename>  已签名的 jar 文件

  • -v  详细输出

例如:

keytool -printcert -file myCertificate.cer

执行上述命令后,将输出指定证书文件的详细信息,包括证书版本、序列号、签名算法、颁发者、有效期等。

keytool -printcertreq 命令

keytool -printcertreq 命令用于打印证书请求的内容。语法格式为:

keytool -printcertreq -alias <alias> -keystore <keystore> -storepass <storepass> [-file <filename>] [-v]

参数说明:

  • -alias <alias>  指定要打印证书请求的条目的别名。

  • -keystore <keystore>  指定包含证书请求的密钥库文件的路径。

  • -storepass <storepass>  指定密钥库的密码。

  • -file <filename>  (可选)将证书请求输出到指定的文件中,而不是打印到控制台。

  • -v  (可选)表示详细输出,会显示更多关于证书请求的信息。

执行该命令后,将输出指定别名对应的证书请求的详细内容,包括请求的相关信息,如主体的名称、公钥等。

例如:

keytool -printcertreq -alias myAlias -keystore myKeystore.jks -storepass myPassword

上述命令将从名为 myKeystore.jks 的密钥库中,打印出别名为 myAlias 的证书请求的内容。如果需要将内容输出到文件中,可以添加 -file 参数,如:

keytool -printcertreq -alias myAlias -keystore myKeystore.jks -storepass myPassword -file myCertReq.txt

这样,证书请求的内容将被输出到 myCertReq.txt 文件中。

keytool -printcrl 命令

keytool -printcrl 命令用于打印证书吊销列表(Certificate Revocation List,CRL)的内容。语法格式为:

keytool -printcrl -file <crl_file>

其中:

  • -file <crl_file> 指定要打印的 CRL 文件的路径。

  • -v  详细输出

执行该命令后,会将指定 CRL 文件中的相关信息打印输出,包括 CRL 的版本、颁发者、下次更新时间、吊销的证书序列号等。

keytool -storepasswd 命令

keytool -storepasswd 命令用于修改密钥库的密码。语法格式为:

keytool -storepasswd -keystore <keystore_file>

其中,<keystore_file> 是要修改密码的密钥库文件的路径。执行该命令后,会提示你输入密钥库的当前密码,然后要求输入新密码并进行确认。

更多选项:

  • -new <arg>  新口令

  • -keystore <keystore>  密钥库名称

  • -storepass <arg>  密钥库口令

  • -storetype <storetype>  密钥库类型

  • -providername <providername>  提供方名称

  • -providerclass <providerclass>  提供方类名

  • -providerarg <arg>  提供方参数

  • -providerpath <pathlist>  提供方类路径

  • -v  详细输出

示例:

keytool -storepasswd -keystore keystore.jks

需要注意的是,直接在命令中提供密码不是一种安全的做法,因为密码可能会从命令历史记录中读取或通过某些方式被观察到。如果省略密码,工具通常会提示你输入密码。另外,在执行与密钥库相关的操作时,务必确保你对密钥库有足够的权限和了解,以避免意外的数据丢失或安全问题。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号