我正在开发一个应该在后台运行的Java应用程序,并且考虑将一些敏感信息(DB凭据等)外部化,以防它应该更改。这些信息是启动应用程序所必需的。但是,我想知道这样做的正确方法是什么?
我在考虑以下问题但需要从安全角度提出建议。
加密密码将在启动应用程序时作为主参数传递。但是,我注意到任何用户都可以在查看操作系统中的进程列表时看到参数。
生成一个外部文件,即带有视图限制的java属性文件(带有加密凭据),并将文件路径传递给应用程序
将加密的凭据放在用户的环境变量中,以便应用程序访问它
注意:我们已经使用了加密工具
就个人而言,我倾向于第二种选择,但我想知道这类案件的建议,意见或最佳做法。
谢谢!
答案 0 :(得分:0)
选项2最常见。 就个人而言,我不建议选择1和3。
也可能有其他选择。
例如,您可以查看PicketBox Vault。 它允许使自定义实现比默认更安全。
实际上它是扩展选项2 - 存储在Keystore中的密钥保护的Vault文件。
该密钥库(别名)的密码必须是安全的,但只有一个(两个)。当需要保护许多属性时,它很有用。它也更易于管理,因为所有属性都以同样的方式保存在一个地方。
答案 1 :(得分:0)
2是最明智的选择。 1和3的问题是,一旦他们可以访问“加密”字符串,他们就必须弄清楚你是如何解密它的(无论如何你必须这样做才能使用它)。
您是否看过Spring Cloud Config,我不知道这是否是您的选择。