Java';s键工具不';t提示输入密钥密码

Java';s键工具不';t提示输入密钥密码,java,passwords,keystore,prompt,keytool,Java,Passwords,Keystore,Prompt,Keytool,Java的keytool有一个名为-keypass的参数,除了用于整个密钥存储的密码外,还允许您设置(单独的)密码来保护您的私钥 根据文件: -keypass的值是一个密码,用于保护生成的密钥对的私钥。如果未提供密码,则会提示用户输入密码。如果在提示下按Return键,则密钥密码将设置为与密钥库密码相同的密码。-keypass值必须至少包含六个字符 但是,当我在调用该命令时忽略了密码,我似乎根本没有收到任何提示,至少当它与-genkeypair结合使用以生成RSA密钥对时不会得到提示。相反,我只

Java的
keytool
有一个名为
-keypass
的参数,除了用于整个密钥存储的密码外,还允许您设置(单独的)密码来保护您的私钥

根据文件:

-keypass
的值是一个密码,用于保护生成的密钥对的私钥。如果未提供密码,则会提示用户输入密码。如果在提示下按Return键,则密钥密码将设置为与密钥库密码相同的密码。
-keypass
值必须至少包含六个字符

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

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


我已经用Java 11 LTS测试了这一点:

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


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

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

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

注意:如果您正在使用jks或jceks,java将向您显示一条警告消息:

JKS密钥库使用专有格式。建议迁移到行业标准格式PKCS12


如果键入:

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密钥存储时,这是不正确的。如果您能在文档中指出这一点,那么我很乐意回顾一下。如前所述,我可以设置密码,但我无法从提示符处设置密码。文档中没有明确说明密码,但文档中有一条声明称,
Java平台的每个实现都需要支持以下标准密钥库类型PKCS#12
,并且还提到了这一点。是的,我知道,但为什么你认为PKCS#12不允许你为密钥设置单独的密码呢?我猜这是PKCS#12的非书面标准。我知道这不是一个具体的答案,但我能找到的最好答案是Java的keytool,它说-
,例如,大多数第三方工具要求PKCS#12密钥库中的storepass和keypass相同。要为这些工具创建PKCS#12密钥库,请始终指定一个与-deststorepass相同的-destkeypass。
Warning:  Different store and key passwords not supported for PKCS12 KeyStores.