2011-12-02 123 views
16

我有一个java的属性对象与Web服务的身份验证信息。 我需要加密该数据,但我不知道需要存储加密密钥的位置才能保持安全。如何在java中安全地存储加密密钥?

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

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

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

好像我的应用程序需要访问密钥,没有办法“保护”它。如果我将它存储在密钥库中会更加模糊,但它似乎并不安全。我希望我错了:) – ScArcher2

+0

这听起来最终像一个引导问题。在链中的某一点,你必须有一个密钥来解密某些东西。即使您使用密钥库,您也需要该密钥库的密码。你有没有办法改变你的认证方案? 另外,如果你问那里,你可能会在http://security.stackexchange.com/上得到一些非常有见识的回复。 – mcfinnigan

+0

@mcfinnigan这就是我的想法。我只是想看看是否有解决问题的办法。 – ScArcher2

回答

5

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

+0

我遇到了客户的安全策略需要在配置文件中加密用户名/密码的情况。这看起来很愚蠢,但我想我会在这里检查一下,看看我是否错过了一些东西。 – ScArcher2

4

这是一个鸡蛋问题。
然后,您将需要找到在哪里存储的密码和密钥库等等.....

根据您的安全要求和需要,你可以使用对称加密enrypt数据和找回密码通过远程服务器(您的服务器)使用客户端证书认证。

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

0

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

+0

你好,你使用过Web PBE配置吗?我认为它可以解决egg-egg问题(总是需要一个主密钥来加密文本)。它是如何设置的?我有点困惑。谢谢您的帮助! V. – Viktor

4

底线是某处需要以未加密的形式拥有“root-of-the-chain”密码。受OS保护的本地文件,在源代码中硬编码的受OS保护的远程文件等。

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