我使用以下命令为我的网络应用生成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).
如果两个密码必须相同,那么任何想法要求它两次的意义是什么?
答案 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中所述,该密钥包含有关此问题的更多参考信息”
即使JSSE实现也希望KeyStorePassword和KeyPassword相同。