繁体   English   中英

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

[英]How do I securely store encryption keys in java?

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

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

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM