我有一个Java属性对象,其中包含Web服务的身份验证信息。 我需要加密这些数据,但我不知道在哪里存储加密密钥才能保持安全。
在加密这些数据和以安全方式检索它方面,有什么最佳实践吗?
使用密钥库是否有任何优势?
ws_user=username
ws_password=password
ws_url=https://www.whatever.com/myservice
我有一个Java属性对象,其中包含Web服务的身份验证信息。 我需要加密这些数据,但我不知道在哪里存储加密密钥才能保持安全。
在加密这些数据和以安全方式检索它方面,有什么最佳实践吗?
使用密钥库是否有任何优势?
ws_user=username
ws_password=password
ws_url=https://www.whatever.com/myservice
你的问题很常见。在Linux中,用户密码存储在一个明文文件中。虽然只有密码哈希值被存储,但如果攻击者获得了访问该文件的权限,他不需要花费太多时间就可以使用离线字典攻击来发现一些密码。在这种情况下,操作系统依赖文件权限来拒绝未授权用户的访问。在你的情况下,也没有太大差别。你必须正确配置密码文件的权限,并确保服务器的物理安全。
关键问题在于某处需要以未加密的形式保留“链的根”密码。这可以是受操作系统保护的本地文件、远程文件、源代码中的硬编码等。
唯一的解决方法是要求人类在应用程序启动时键入初始密码,但对于需要自动启动的应用程序来说显然不可能。
我曾经成功地使用Jasypt的StringEncrytor
来加密属性文件中的敏感信息,以及一些内部过程来生成盐并检索密码。由于您正在使用Web服务,因此您可以使用Jasypt的Web PBE Configuration在部署时手动输入密码,甚至可以自己开发类似的解决方案。