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

时间:2011-12-02 14:32:31

标签: java encryption keystore

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

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

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

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

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:0)

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