【问题标题】:Lost keystore password, what are my options?丢失密钥库密码,我有什么选择?
【发布时间】:2018-01-29 00:29:54
【问题描述】:

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

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

【问题讨论】:

  • 测试所有组合并等待很长时间(或者它可能在第一次尝试中得到它,你可能很幸运)或者等待量子计算改进,这将使所有当前的加密方法都无用。

标签: java certificate keystore keytool


【解决方案1】:

实际上它有点复杂。尽管有它的名字,Java 'keystore' 实际上可以包含以下的任意组合:

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

  • TrustedCertEntry -- 包含证书,通常是根 CA 证书,用于验证其他方,包括验证服务器的 SSL/TLS 客户端

  • (仅在某些格式中,不常见的 JKS)SecretKeyEntry -- 此处不相关

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

因此,如果您告诉keytool 将您自己的证书导入新的密钥库文件,它会这样做——但作为可以识别其他人的受信任证书条目,而不是作为私钥条目可以识别你。唯一的指示是一个微妙的指示:keytool 会说 Certificate was added(表示受信任的证书)而不是 Certificate reply was installed(表示匹配的私钥)。

如果您随后将此 cert-only-not-privatekey 密钥库用于 SSL/TLS 服务器,则不会立即或明显错误;通常它会拒绝所有连接尝试,因为“没有共同的密码套件”。 (如果两个端点都配置为允许“匿名”密码套件,则连接将/可能会通过匿名套件成功,但这对现在常见的主动攻击没有安全性,因此通常不会这样做。)

但这并不会改变结果:如果没有密码短语并因此无法访问旧私钥,您就会陷入困境并且必须重新开始。请注意,如果您使用付费 CA,其中许多(大多数是 IME)允许免费或以大幅折扣为相同域名“重新加密”证书。

【讨论】:

    【解决方案2】:

    如果我只是创建一个新的密钥库并将证书导入该密钥库,我是否可能会遇到问题

    你会遇到你做不到的问题。您无法访问私钥。

    还是我必须申请新证书?

    您必须创建一个新的密钥库、密钥对、CSR、对其进行签名、导入...

    【讨论】:

    • 这就是我的想法,我希望有一些神奇的解决方案。哦,好吧。
    猜你喜欢
    • 2016-12-01
    • 2016-01-03
    • 2021-11-02
    • 1970-01-01
    • 2021-08-31
    • 2020-12-18
    • 1970-01-01
    • 2021-10-20
    • 2023-03-31
    相关资源
    最近更新 更多