如何在命令“java -Djasypt.encryptor.password=somepassword -jar name.jar”中隐藏密码

问题描述 投票:0回答:4

我正在使用 Jasypt 加密并在属性文件中的 ENC() 中指定属性值。解密密码是通过命令行参数发送的,如下所示

java -Djasypt.encryptor.password=somepassword -jar name.jar
。一切工作正常,但问题是当我搜索正在运行的进程时,它也显示密码。有没有办法通过从某处读取来隐藏加密密码?

我想过使用环境变量,但这也可能会暴露密码。所以,决定不这样做。

更新: 另一篇 SO 帖子里有解决方案 Spring Boot 如何在属性文件中隐藏密码?

我遵循的解决方案是创建一个名为

JASYPT_ENCRYPTOR_PASSWORD
的环境变量,执行命令
java -jar name.jar
,然后取消设置环境变量。这正如我预期的那样。

java spring-boot password-encryption jasypt
4个回答
2
投票

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

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

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

如果你看例如在 JBoss,他们使用一种称为保险库的东西。有一个手册页解释了单个步骤。您可以为您的应用程序重新创建所有这些,或者只是从您指定文件名的文件中读取纯文本密码,例如作为系统属性。文件本身必须在文件系统级别上防止未经授权的访问(仅为所有者设置读取权限),并且(如有必要)在您的应用程序中设置一个

SecurityManager
,拒绝除该文件之外的其他类访问该文件用于读入它。这是安全相关应用程序(如PGPOpenSSL)的常见做法。


0
投票

Jasypt 是加密应用程序属性的最常见和最简单的方法。

如上所述,您可以使用环境变量来存储 Jasypt 加密或解密的密码,并在将应用程序作为 jar 运行时传递该变量。

但是vault的目的更加不同,您可以在vault中存储和加密超出所需的内容,vault为您提供了在加密方面更多的控制权。 您也可以使用 Vault 在运行时更新或更改值。

Vault 中生成的秘密更加动态,而不是用户定义的,它完全抽象了加密。

因此,使用Vault还是JASYPT取决于您的用例。但两者都在工业中广泛使用。

作为开发人员,我更喜欢 JASYPT,但作为整个项目,我在 Prod 中使用 Vault。


0
投票

可以尝试在linux命令行中添加HISTCONTROL=ignorespace配置,这样添加空格后输入命令时就不会记录history命令查询历史了。


-3
投票

您绝对可以使用 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

© www.soinside.com 2019 - 2024. All rights reserved.