keytool 是一个用于管理密钥和证书的 Java 工具。它可以用于生成、导入、导出和修改密钥库和证书。以下是一些常用的 keytool 命令和参数:
1.生成密钥对:
使用 -genkeypair 命令生成密钥对,例如:
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -validity 365 -keystore mykeystore.jks
这将生成一个 RSA 密钥对,有效期为 365 天,并存储在名为 mykeystore.jks 的密钥库中。
2.查看密钥库中的证书信息:
使用 -list 命令查看密钥库中的证书详细信息,例如:
keytool -list -v -keystore mykeystore.jks
这将显示密钥库中的证书、别名、有效期等信息。
3.导出证书:
使用 -exportcert 命令将指定别名的证书导出到文件,例如:
keytool -exportcert -alias mykey -keystore mykeystore.jks -file mycert.crt
这将导出名为 mykey 的证书到名为 mycert.crt 的文件中。
4.修改密钥库和别名密码:
使用 -storepasswd 命令修改密钥库密码,例如:
keytool -storepasswd -keystore mykeystore.jks
这将提示您输入新的密钥库密码。
使用 -keypasswd 命令修改别名条目的密码,例如:
keytool -keypasswd -alias mykey -keystore mykeystore.jks
这将提示您输入新的别名密码。
5.其他命令:
-import:将已签名的数字证书导入密钥库。
-delete:删除密钥库中的某个条目。
6.密钥库类型
当您使用 keytool 生成或管理密钥对、证书时,您可以选择不同的密钥库类型。其中,PKCS12 是一种常见的密钥库格式,也称为 P12 或 PFX 格式。
keytool -exportcert -alias mykey -keystore mykeystore.p12 -storepass password1234 -storetype PKCS12 -file mycert.crt
如果您希望将现有的 Java 密钥库(JKS 格式)转换为 PKCS12 格式,可以使用以下命令:
keytool -importkeystore -srckeystore <MY_KEYSTORE.jks> -destkeystore <MY_FILE.p12> -srcstoretype JKS -deststoretype PKCS12 -deststorepass <PASSWORD_PKCS12> -srcalias <ALIAS_SRC> -destalias <ALIAS_DEST>
其中:
<MY_KEYSTORE.jks>:指向要转换的现有 JKS 密钥库的路径。
<MY_FILE.p12>:指向要创建的 PKCS#12 文件的路径(.p12 或 .pfx 扩展名)。
<PASSWORD_PKCS12>:在打开 PKCS#12 文件时会要求输入的密码。
<ALIAS_SRC>:与 JKS 密钥库中的证书条目名称匹配的别名。
<ALIAS_DEST>:在 PKCS12 文件中创建的别名。
请注意,直接在命令中提供密码不是一种安全的做法,因为密码可能会从命令历史记录中读取或通过 ps 命令观察到。如果省略密码,工具会提示您输入密码。
7. openssl pkcs12 命令
PKCS#12 文件是一种用于将一个或多个数字证书和私钥合并到单个文件中的格式。它通常具有 .p12 或 .pfx 扩展名。
这种文件格式在 SSL/TLS 通信中广泛使用,用于存储证书链和私钥。
使用 openssl pkcs12 -in 命令可以从 PKCS#12 文件中提取信息,例如证书、私钥等。
您需要指定要处理的 PKCS#12 文件的路径,例如:
openssl pkcs12 -in mycert.p12
这将显示 PKCS#12 文件 mycert.p12 中的证书和私钥信息。
其它参数如下,
-nocerts 参数用于在从 PKCS#12 文件中导出私钥时,不包括证书部分。
如果您只想导出私钥而不需要证书,可以使用此选项。
-nodes 参数用于在导出私钥时,不加密私钥。
如果您希望导出未加密的私钥,可以使用此选项。
-out 参数用于指定输出文件的路径。
您可以将导出的私钥或其他信息保存到指定的文件中。