Java 如何在setenv.sh中安全保存敏感信息

Java 如何在setenv.sh中安全保存敏感信息,java,tomcat,environment-variables,Java,Tomcat,Environment Variables,我的Java web应用程序需要访问某些密码。我已将应用程序配置为从环境变量读取这些密码。当我将应用程序部署到tomcat时,这些环境变量存储在setenv.sh文件中,如下所示 export SOME_PWD="somvalue" 有没有更好的方法来做到这一点,这样它们就不会以明文形式存储?我希望在我的git存储库中维护setenv.sh,以跟踪更改并轻松进行CI部署,并且不希望在存储库中保留明文密码 如果您使用的是Linux,并且环境变量包含秘密,那么您已经在打一场错误的仗,试图在用于启动

我的Java web应用程序需要访问某些密码。我已将应用程序配置为从环境变量读取这些密码。当我将应用程序部署到tomcat时,这些环境变量存储在
setenv.sh
文件中,如下所示

export SOME_PWD="somvalue"

有没有更好的方法来做到这一点,这样它们就不会以明文形式存储?我希望在我的git存储库中维护
setenv.sh
,以跟踪更改并轻松进行CI部署,并且不希望在存储库中保留明文密码

如果您使用的是Linux,并且环境变量包含秘密,那么您已经在打一场错误的仗,试图在用于启动JVM进程的shell脚本中保护它们

Linux通常有一个
/proc
文件系统,每个进程都有一个虚拟目录,每个进程目录都有一个
环境
文件,系统上的任何用户都可以在其中转储进程的环境

因此,您需要保护的不仅仅是包含环境变量
export
行的文件。我认为标准UNIX文件权限可以充分保护shell脚本。如果你不信任你的管理员,你的系统永远不会被认为是安全的


你应该考虑改变你的应用程序来从一个同样可以保护的文件(文件权限)中加载这些配置参数,而不是使用进程的“环境”来实现这个目的。看看Ansible的特性。它允许在存储库中以加密格式存储敏感度数据,并在部署期间解密它们(如果您有相应的密钥)。但在本例中,您应该使用Ansible进行部署。即使它是关于Python的,您也会发现一个有趣的讨论