如何在Java中安全地存储加密密钥?

我有一个java属性对象,其中包含Web服务的身份validation信息。 我需要加密这些数据,但我不知道在哪里需要存储加密密钥才能保持安全。

有关加密此数据并以安全方式检索数据的最佳做法是什么?

使用密钥库有什么好处吗?

ws_user=username ws_password=password ws_url=https://www.whatever.com/myservice 

你的问题很常见。 在linux中,用户密码存储在纯文本文件中。 虽然只存储了密码哈希值,但如果攻击者能够访问该文件,他就不会花很长时间使用离线词典攻击来发现一些密码。 在这种情况下,操作系统依赖文件权限来拒绝未经授权的用户访问。 在你的情况下,它没有太大的不同。 您必须正确配置密码文件权限并确保服务器的物理安全性。

这是一个鸡蛋问题。
然后,您需要找到存储密钥库密码的位置等等…..

根据您的安全要求和需求,您可以使用对称加密来获取数据,并使用客户端证书身份validation通过远程服务器(您的服务器)检索密码。

或者你可以使用对称的enryption加密数据,并在你的jar中硬编码密码,这是不安全的,但需要一些努力来找到它,你可以将责任委托给谁可以访问你的文件的文件系统权限。

最重要的是,某个地方需要以未加密的forms拥有“根链”密码。 受OS保护的本地文件,受OS保护的远程文件,在源中硬编码等。

唯一的方法是要求人在应用程序启动时键入初始密码,这对于需要自动启动的应用程序显然是不可能的。

我成功地使用Jasypt的StringEncrytor来加密属性文件中的敏感信息,以及一些生成盐和检索密码的内部程序。 由于您使用的是Web服务,因此可以使用Jasypt的Web PBE配置在部署时手动输入密码,甚至可以使用自己的类似解决方案。