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