如何将密码传递给Java(Spring Boot)应用程序

时间:2019-10-18 11:19:44

标签: java spring-boot ssl password-protection password-encryption

我们必须对通过springboot应用程序创建的其余Web服务使用ssl证书。

现在,我知道要使用证书需要密码。因此,我们使用openssl将可用的.pem(无密码)更改为.p12(有密码)。现在我们必须提供此密码。

问题是引入任何新密码所带来的开销。

由于设计不良,我们无法在我们的application.properties中硬编码此密码。因此,我们正在考虑找出在应用程序中使用密码的其他方式。到目前为止,我可以想到以下选项。哪个更好?为什么?

  1. 而不是在application.properties中设置密码,而是从Java代码进行设置。 (不确定将其设置为环境变量还是系统变量)

  2. 使用环境变量存储密码。

  3. 使用任何存储密码的文本文件(由于设计不良,因此不建议再次使用该文件)

4 个答案:

答案 0 :(得分:1)

您可以通过以下方式实现您的方案。

我正在发布示例示例。\

在属性文件中:

spring.datasource.url=${db.url}
spring.datasource.username=${db.username}

在启动项目时,

您可以给出以下命令:

java -jar -Ddb.url=jdbc:postgresql://localhost:5432/postgres -Ddb.username=postgres  sample.0.0.1-SNAPSHOT.jar(your jar name)

答案 1 :(得分:0)

选项3似乎可行,但是您可以对文件进行加密,而不是将其存储在纯文本文件中,并在读取文件时在应用程序中添加解密功能。​​

答案 2 :(得分:0)

对于提供的选项,我将选择选项2,通过使用环境变量,即使在容器化的环境和云中,也将更易于提供和更改密码。

但是您还可以考虑其他选择,例如使用安全的k-v存储器,例如Hashicorp Vaultetcd

请注意,使用Vault或etcd,您也可以动态提供和更改证书,而不是随应用程序一起提供。

答案 3 :(得分:0)

我可以想到3种方法

1。。您只能在application.properties中定义密码属性 ,但可以通过     应用程序启动期间属性的值。

  

java -jar -Dmyapp.password =您的密码myapplication.jar

2。。您可以在应用程序启动过程中将加密的密码放入application.properties中,并传递解密密钥。 Jasypt在春季靴子中发挥出色。

  

java -jar -Dmyapp.decryptKey = YOUR_KEY myapplication.jar

3。。您可以使用spring vault