【问题标题】:How do I store a Java KeyStore password?如何存储 Java KeyStore 密码?
【发布时间】:2011-03-03 14:08:29
【问题描述】:

在我的 Web 应用程序中,我访问了一个存储在 Java KeyStore 中的私钥。我想知道存储 KeyStore 和私钥密码的最佳/推荐方式是什么。

我考虑过使用属性文件,但在生产环境中使用似乎不是很安全(将密码存储在纯文本文件中)。此外,在我的代码中硬编码密码不是我愿意接受的选择。

谢谢。

【问题讨论】:

    标签: java keystore private-key


    【解决方案1】:

    您可以使用属性文件,因为您提到只是散列密码以获得额外的安全性盐散列密码。这解决了必须以纯文本形式保存密码的问题。然后,您可以使用 MD5 或 SHA1 密码对其进行哈希处理,个人选择。

    【讨论】:

    • 如果您对密码进行哈希处理,您将如何找回密码?散列密码是没有意义的。
    • 您没有检索它,而是再次对其进行哈希处理并检查它们是否相同。例如,如果我有您的用户名的哈希:d3a03c197da2c09307f06f8513443599 然后在应用程序中您将哈希用户输入的内容,以便您的用户名查看是否相同。
    • 我必须同意 Καrτhικ,您将无法使用其密码的哈希打开密钥库。使用密码哈希保护密钥存储不会增加任何额外的安全性。
    • 这个答案对于所提出的问题毫无意义。为什么这被接受? ://
    • 如果您对密码进行哈希处理,那么您也必须将哈希键存储在内存中......那么您就回到了问题中描述的问题
    【解决方案2】:

    这是一个棘手的引导问题。一些选项:

    • 让您的应用提示用户解锁密钥库(不是很友好,但可以)

    • 将密码存储在所有者只读文件 (0400) 中,并使用它来解锁密钥库。攻击者必须闯入您的服务器才能读取文件。这似乎是使用最广泛的技术
    • 使用 HSM
    • 使用 Hashicorp Vault 之类的工具(但它也存在引导问题)。

    【讨论】:

    • 自 2016 年以来这方面是否有任何改进,我想没有。这只是说 JKS 访问应该受到系统访问权限的限制,但我们都在寻找任何独立于平台的解决方案。 Bullet 1 不是服务应用程序的解决方案。
    猜你喜欢
    • 2017-06-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多