如何存储Java密钥库密码?

如何存储Java密钥库密码?,java,keystore,private-key,Java,Keystore,Private Key,在我的web应用程序中,我访问存储在Java密钥库中的私钥。我想知道存储密钥库和私钥密码的最佳/推荐方法是什么 我考虑过使用属性文件,但在生产环境中使用它似乎不太安全(将密码存储在纯文本文件中)。另外,在我的代码中硬编码密码不是我愿意接受的选项 谢谢。您可以使用您提到的属性文件,只需对密码进行哈希运算以获得额外的安全性。这就解决了必须以明文形式保存密码的问题。然后,您可以使用MD5或SHA1密码对其进行散列,这是个人选择 这是一个棘手的引导问题。一些选择: 让你的应用程序提示用户解锁密钥库(不

在我的web应用程序中,我访问存储在Java密钥库中的私钥。我想知道存储密钥库和私钥密码的最佳/推荐方法是什么

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


谢谢。

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

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

  • 让你的应用程序提示用户解锁密钥库(不是很友好,但可能)

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

如果对密码进行哈希运算,将如何检索密码?对密码进行散列是没有意义的。您不会检索密码,而是再次对其进行散列并检查它们是否相同。例如,如果我有您用户名的散列:d3a03c197da2c09307f06f8513443599,那么在应用程序中,您将散列用户输入的内容,以便查看您的用户名是否相同。我必须同意Καrτhικ,您将无法使用其密码的散列打开密钥存储。用密码散列来保护密钥存储不会增加任何额外的安全性。这个答案对于所问的问题毫无意义。为什么会被接受/如果对密码进行哈希运算,则还必须将哈希键存储在内存中。。然后你又回到了问题中描述的问题上。自2016年以来,这方面是否有任何改善,我想不是这样。这只是说JKS访问应该受到系统访问权限的限制,但我们都在寻找任何独立于平台的解决方案。项目符号1不是服务应用程序的解决方案。