keytool 是 Java 开发工具包(JDK)中的一个命令行工具,用于管理密钥库(keystore)和证书。它可以用于生成密钥对、创建数字证书请求(CSR)、导入/导出证书和私钥等操作。
直接打开终端,输入 keytool 命令查看命令的帮助信息,如下图:
上图中,keytool 返回了很多子命令,每个子命令还包含属于自己的选项,可以通过“keytool 子命令 -help”的方式获取具体子命令的帮助信息,例如:
# 查看 -certreq 子命令帮助信息 keytool -certreq -help
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 用于生成证书请求,该命令支持的选项如下:
-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 -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 -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 -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 -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 命令用于根据证书请求生成证书。它需要一个证书请求文件(.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 -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 -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 -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 -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 -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 -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 -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 命令用于打印证书吊销列表(Certificate Revocation List,CRL)的内容。语法格式为:
keytool -printcrl -file <crl_file>
其中:
-file <crl_file> 指定要打印的 CRL 文件的路径。
-v 详细输出
执行该命令后,会将指定 CRL 文件中的相关信息打印输出,包括 CRL 的版本、颁发者、下次更新时间、吊销的证书序列号等。
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
需要注意的是,直接在命令中提供密码不是一种安全的做法,因为密码可能会从命令历史记录中读取或通过某些方式被观察到。如果省略密码,工具通常会提示你输入密码。另外,在执行与密钥库相关的操作时,务必确保你对密钥库有足够的权限和了解,以避免意外的数据丢失或安全问题。