丢失密钥库密码,我有什么选择?

问题描述:

我有一个密钥库,我用它来生成一些.csr文件,将它们发送出去并取回.p7b文件。然而,我设法失去了我的密钥库密码,我看到有一个蛮力java程序来解决它,但是我知道我的密码长度为15个字符,这需要很长时间。我也尝试从旧的密钥库中创建一个新的密钥库,就像一些人所建议的那样,但它仍然要求我输入密码,如果没有密码,就会失败。丢失密钥库密码,我有什么选择?

如果我只是创建一个新的密钥库并将证书导入该证书,或者我必须申请新的证书,那么我可能会遇到问题吗?

+0

测试所有组合,并等待很长一段时间(也许它得到它的第一次尝试,你可能会幸运)或等待量子计算来改善,这将使得目前所有的加密方法没用。 –

难道我可能碰到的问题,如果我只是创建一个新的密钥库和证书导入到一个

你会碰到,你不能这样做的问题。您已失去对私钥的访问权限。

还是必须申请新证书?

你必须创建一个新的密钥库,密钥对,CSR,得到它的签署,将其导入,...

+0

这就是我的想法,我希望有一些神奇的解决方案。好吧。 –

其实它更复杂一些。尽管它的名字,一个Java的密钥库“实际上可以包含任意组合:

  • PrivateKeyEntry - 包含专用密钥匹配的证书或链条,用来证明你自己的身份,特别是用于SSL/TLS服务器

  • TrustedCertEntry - 包含证书,通常根CA证书,用来验证其他各方,包括SSL/TLS客户机验证服务器(S)

  • (只在某些格式,不常见JKS)SecretKeyEntry - 在此不相关

请参阅the javadoc for java.security.KeyStore。实际上,Java中用于验证服务器的SSL/TLS(包括HTTPS)客户机使用的CA证书的“信任库”通常是密钥库文件,默认情况下是作为JRE的一部分提供的JRE/lib/security/cacerts ),或从中链接(对于OpenJDK,至少在我使用过的系统中)。

因此,如果您告知keytool将您自己的证书导入到新的密钥库文件中,它将这样做 - 但它会这样做 - 但作为可识别其他人的可信证书条目(而不是作为可以识别其他人的私钥条目)识别你。唯一的迹象是一个微妙的:keytool将会说Certificate was added(这意味着一个trustedcert)NOT Certificate reply was installed(这意味着一个匹配的私钥)。

如果您然后对SSL/TLS服务器使用此cert-only-not-privatekey密钥存储库,则不会给出任何即时或明显的错误;通常它会将所有连接尝试拒绝为“不共有密码套件”。 (如果两个端点都配置为允许“匿名”密码组,连接将会/可能成功使用匿名套件,但这不会对现在常见的主动攻击提供安全保护,因此通常不会完成。)

但是这并不能改变结果:没有密码,从而获得了老专用密钥,你楔形,必须重新开始。请注意,如果您使用的支付CA许多(IME最)他们的允许“重新键入”免费同一域名(一个或多个),或在一个很大的折扣一个证书。