"密钥密码"的重要性是什么?在密钥库中使用keytool

时间:2014-08-11 09:07:34

标签: java ssl-certificate keystore keytool

我使用以下命令为我的网络应用生成jks。

keytool -genkey -keyalg RSA -alias my-app -validity 10800 -keysize 2048 -sigalg SHA1withRSA -keystore myapp.jks

此命令提示如下问题:

Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:  GS
What is the name of your organizational unit?
  [Unknown]:  XX
What is the name of your organization?
  [Unknown]:  YY
What is the name of your City or Locality?
  [Unknown]:  ZZ
What is the name of your State or Province?
  [Unknown]:  AA
What is the two-letter country code for this unit?
  [Unknown]:  BB
Is CN=GS, OU=XX, O=YY, L=ZZ, ST=AA, C=BB correct?
  [no]:  yes

Enter key password for <my-app> //Why this password is required???
        (RETURN if same as keystore password):  

只有当密钥库密码[首次提示]和密钥密码时,Tomcat才能读取此密钥库。当我使用其他密码代替“密钥密码”时,由于密钥库文件,tomcat无法启动 我的问题是密钥密码的意义是什么。

P.S:我看到了link。他们在这里说:

Press RETURN when prompted for the key password (this action makes the key password the same as the KeyStore password).

如果两个密码必须相同,那么任何想法要求它两次的意义是什么?

3 个答案:

答案 0 :(得分:5)

正如JavaDoc所述

  

提示您输入的keypass值指定密码   即将生成的私钥。你总是需要这个   密码以访问包含该密钥的密钥库条目。   该条目不必拥有自己的密码。当系统提示时   对于密钥密码,您可以选择让它成为密码   与密钥库密码相同。

密钥库可以包含多个密钥,每个密钥只能使用密码访问。因此,如果您希望将密钥密码与您正在创建的密钥库保持一致,则keytool只是为您提供一个选项。

答案 1 :(得分:1)

您可以在一个密钥库中拥有许多密钥,每个密钥都有自己的密码(或者如果您选择密钥库本身,则与密钥库本身相同)。这是你的决定,你关心密钥的安全性。

答案 2 :(得分:1)

@Maas已经回答了,需要KeyPassword来访问存储在KeyStore中的密钥条目。

发生这种情况的方式是:首先使用KeyStore密码访问/解锁KeyStore,然后使用keyPassword解密该KeyStore中存在的密钥条目。

通常,ssl的各种实现/使用都考虑将相同的密码用于KeyStorePassword和keyPassword

tomcat也是如此。如果您看到文档tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html,则他们已经明确指出“ 您的私钥密码和密钥库密码应该相同。如果它们不同,则会在Java方面出现错误。 io.IOException:无法恢复密钥,如Bugzilla issue 38217中所述,该密钥包含有关此问题的更多参考信息”

enter image description here

即使JSSE实现也希望KeyStorePassword和KeyPassword相同。

enter image description here

https://access.redhat.com/documentation/en-US/Fuse_MQ_Enterprise/7.1/html/Security_Guide/files/SSL-SysProps.html

https://docs.oracle.com/javase/8/docs/technotes/guides/security/jsse/JSSERefGuide.html#KeyManagerFactory