我正在使用Jasypt加密,并在属性文件的ENC()中指定属性值。解密密码通过这样的命令行参数发送java -Djasypt.encryptor.password=somepassword -jar name.jar。一切正常,但问题是当我搜索正在运行的进程时,它也会显示密码。是否可以通过从某处读取密码来隐藏加密密码?
java -Djasypt.encryptor.password=somepassword -jar name.jar
我考虑过使用环境变量,但是也可以公开密码。因此,决定反对。
我所遵循的解决方案是使用名称创建一个环境变量JASYPT_ENCRYPTOR_PASSWORD,执行命令java -jar name.jar,然后取消设置环境变量。这按我的预期工作。
JASYPT_ENCRYPTOR_PASSWORD
java -jar name.jar
我遵循的解决方案是创建一个名称为JASYPT_ENCRYPTOR_PASSWORD的环境变量,执行命令java -jar name.jar,然后取消设置环境变量。这按我的预期工作。
设置环境变量(短时间还是短时间)都没关系,这不是一个好主意。即使最短的时间也足以使攻击者可以访问它。在类似的攻击中,可以预测临时文件的名称,并允许攻击者创建具有该名称的链接,例如,访问/ etc / passwd-file等。
这个问题存在了一段时间,因此已经有几种解决方案,其中大多数解决方案都可以用于包含密码或用于对敏感数据进行加密和解密的密钥存储的文件。
例如,如果您查看JBoss,他们会使用称为Vault的东西。有一个手册页介绍了单个步骤。您可以为您的应用程序重新创建所有这些内容,或者仅从您在其中指定文件名(例如,作为系统属性)的文件中读取纯文本密码。必须保护文件本身,以防在文件系统级别上未经授权的访问(仅设置所有者的读取权限),并且(如果需要)在您的应用程序中,通过设置a SecurityManager来拒绝除使用的类以外的其他类对该文件的访问进行阅读。这是与安全相关的应用程序(如PGP或OpenSSL)的常见做法。
SecurityManager