Java 的 keytool 不提示输入密钥密码

Java's keytool doesn't prompt for key password

Java 的 keytool 有一个名为 -keypass 的参数,除了用于整个密钥库。

根据文档:

The value of -keypass is a password used to protect the private key of the generated key pair. If a password is not provided, then the user is prompted for it. If you press the Return key at the prompt, then the key password is set to the same password as the keystore password. The -keypass value must have at least six characters.

但是,当我在调用此命令时省略密码时,我似乎根本没有收到提示,至少当它与 -genkeypair 结合使用以生成 RSA 密钥时没有提示一对。相反,我只是获得了一般帮助页面。如果我使用 "" 强制使用“空”密码,那么它(正确地)告诉我密码至少应为 6 个字符。

有没有办法强制 keytool 提示输入密钥特定密码,而不是根据 -genkeypair 的文档在命令行上提供它?


我已经针对 Java 11 LTS 进行了测试:

keytool -genkeypair -alias test1 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keystore test.pfx -storepass test1234
        -keypass

keytool -genkeypair -alias test1 -keyalg RSA -keysize 4096 -sigalg SHA256withRSA -keystore test.pfx -storepass test1234
        -keypass ""

两者似乎都不起作用;如您所见,我已经将 -keypass 参数移到了末尾,因此它无法吞噬一个参数作为密码。

Java 11 的默认密钥库类型是 PKCS12,它始终假定密钥库密码和密钥密码相同,因此不会提示您输入它(documentation)

如果您需要使用密钥密码来满足您的要求,您可以使用其他密钥库类型,例如 jksjceks

注意:如果您使用的是 jks 或 jceks,java 会显示一条警告消息:

The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format


如果您键入:

keytool -genkeypair -keyalg RSA -keysize 2048 -keystore double.pfx -storepass Storepass -keypass Keypass

您将收到以下警告:

Warning:  Different store and key passwords not supported for PKCS12 KeyStores.

请注意,PKCS#12 密钥本身存储 支持多个密码:它们对多个部分(密钥、证书)和 KeyBag 和这样的。只是缺少 Java 支持。我在解析几个密钥存储并查看格式后发现了这一点。