我们必须对通过springboot应用程序创建的其余Web服务使用ssl证书。
现在,我知道要使用证书需要密码。因此,我们使用openssl将可用的.pem(无密码)更改为.p12(有密码)。现在我们必须提供此密码。
问题是引入任何新密码所带来的开销。
由于设计不良,我们无法在我们的application.properties中硬编码此密码。因此,我们正在考虑找出在应用程序中使用密码的其他方式。到目前为止,我可以想到以下选项。哪个更好?为什么?
而不是在application.properties中设置密码,而是从Java代码进行设置。 (不确定将其设置为环境变量还是系统变量)
使用环境变量存储密码。
使用任何存储密码的文本文件(由于设计不良,因此不建议再次使用该文件)
答案 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 Vault或etcd。
请注意,使用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