【问题标题】:How to hide the password in the command "java -Djasypt.encryptor.password=somepassword -jar name.jar"如何在命令“java -Djasypt.encryptor.password=somepassword -jar name.jar”中隐藏密码
【发布时间】:2019-12-01 18:33:11
【问题描述】:

我正在使用 Jasypt 加密并在属性文件的 ENC() 中指定属性值。解密密码通过命令行参数发送,例如java -Djasypt.encryptor.password=somepassword -jar name.jar。一切正常,但问题是当我搜索正在运行的进程时,它也会显示密码。有没有办法通过从某个地方读取加密密码来隐藏它?

我曾想过使用环境变量,但这也可能会暴露密码。所以,决定反对它。

更新: 在另一个 SO 帖子中有一个解决方案 Spring Boot How to hide passwords in Properties file?

我遵循的解决方案是创建一个名为JASYPT_ENCRYPTOR_PASSWORD的环境变量,执行命令java -jar name.jar,然后取消设置环境变量。这符合我的预期。

【问题讨论】:

  • echo password | java .... 然后读取它而不是获取属性。
  • 记得在 JVM 使用后清除它,否则堆转储会显示它

标签: java spring-boot password-encryption jasypt


【解决方案1】:

您绝对可以使用 Jasypt 读取存储在属性文件中的EncryptableProperties,使用如下方式:

datasource.username=reportsUser 
datasource.password=ENC(G6N718UuyPE5bHyWKyuLQSm02auQPUtm) 

然后您可以从您的程序中检索属性(加密的和未加密的):

StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();     
encryptor.setPassword("jasypt"); // could be got from web, env variable...    

Properties props = new EncryptableProperties(encryptor);  
props.load(new FileInputStream("/path/to/my/configuration.properties"));

String datasourceUsername = props.getProperty("datasource.username");

String datasourcePassword = props.getProperty("datasource.password");

请注意,在上面的示例中,未加密和加密属性的检索方式相同,而 Jasypt 自动处理解密/加密。

以下是相关 Jasypt 文档的链接: http://www.jasypt.org/encrypting-configuration.html

这里有一个类似的问题,有更多细节:

https://stackoverflow.com/a/10307724/236528

【讨论】:

    【解决方案2】:

    我遵循的解决方案是创建一个名为 JASYPT_ENCRYPTOR_PASSWORD 的环境变量,执行命令 java -jar name.jar 然后取消设置环境变量。这符合我的预期。

    设置一个环境变量,不管是不是短时间,都不是一个好主意。即使是最短的时间也足以让攻击者访问它。有类似的攻击可以预测临时文件的名称,并允许攻击者创建一个具有该名称的链接,例如访问 /etc/passwd 文件等。

    这个问题已经存在了一段时间,因此已经有几个解决方案,其中大多数都适用于包含密码的文件或用于对敏感数据进行加密和解密的密钥存储。

    如果你看起来在 JBoss,他们使用一种叫做保险库的东西。有一个manual page 解释单个步骤。您可以为您的应用程序重新创建所有这些,或者只是从您指定文件名的文件中读取纯文本密码,例如作为系统属性。文件本身必须在文件系统级别防止未经授权的访问(仅设置所有者的读取权限),并且 - 如果需要 - 在您的应用程序中通过设置 SecurityManager 来拒绝其他类访问此文件而不是一个用于读取它。这是与安全相关的应用程序(如 PGPOpenSSL)的常见做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-08
      • 2019-09-10
      • 2014-07-22
      • 2021-08-13
      • 1970-01-01
      • 2020-05-14
      • 2017-07-29
      • 1970-01-01
      相关资源
      最近更新 更多