我有一个java属性对象,其中包含Web服务的身份验证信息。 我需要加密这些数据,但我不知道在哪里需要存储加密密钥才能保持安全。
加密此数据并以安全方式检索数据的最佳做法是什么?
使用密钥库有什么好处吗?
ws_user=username
ws_password=password
ws_url=https://www.whatever.com/myservice
答案 0 :(得分:8)
你的问题很常见。在linux中,用户密码存储在纯文本文件中。虽然只存储了密码哈希值,但如果攻击者可以访问该文件,他就不会花很长时间使用离线字典攻击来发现一些密码。在这种情况下,操作系统依赖文件权限拒绝访问未经授权的用户。在你的情况下,它没有太大的不同。您必须正确配置密码文件权限并确保服务器的物理安全性。
答案 1 :(得分:4)
这是一个鸡蛋问题 然后,您需要找到存储密钥库密码的位置等等.....
根据您的安全要求和需求,您可以使用对称加密来获取数据,并使用客户端证书身份验证通过远程服务器(您的服务器)检索密码。
或者你可以使用对称的enryption加密数据,并在你的jar中硬编码密码,这是不安全的,但需要一些努力来找到它,你可以将责任委托给谁可以访问你的文件的文件系统权限。
答案 2 :(得分:4)
最重要的是,某个地方需要拥有"链的根源"密码以未加密的形式。受OS保护的本地文件,受OS保护的远程文件,在源代码中硬编码等。
唯一的方法是要求人员在应用程序启动时输入初始密码,对于需要自动启动的应用程序来说,这显然是不可能的。
答案 3 :(得分:0)
我已成功使用Jasypt的StringEncrytor
来加密属性文件中的敏感信息,以及一些用于生成salt和检索密码的内部过程。由于您使用的是Web服务,因此您可以使用Jasypt的Web PBE Configuration在部署时手动输入密码,甚至可以使用自己的类似解决方案。