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

时间:2021-03-05 11:48:52

标签: java passwords keystore prompt keytool

Java 的 declare @StartDate datetime,@CurrentDate datetime set @CurrentDate = GETDATE(); set @StartDate = DATEADD(MONTH,-13,@CurrentDate) SELECT * FROM Data_2020 WHERE DateFieldName > @StartDate -- Or DateFieldName BETWEEN @StartDate AND @CurrentDate UNION ALL SELECT * FROM Data_2021 WHERE DateFieldName > @StartDate -- Or DateFieldName BETWEEN @StartDate AND @CurrentDate 有一个名为 keytool 的参数,除了用于整个密钥库的密码之外,它还允许您设置(单独的)密码来保护您的私钥。

根据文档:

<块引用>

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

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

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


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

-genkeypair

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 "" 参数移至末尾,因此它无法将参数作为密码。

1 个答案:

答案 0 :(得分:1)

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

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

注意:如果您使用的是 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.
相关问题