如何向java(Spring boot)应用程序传递密码

如何向java(Spring boot)应用程序传递密码,java,spring-boot,ssl,password-protection,password-encryption,Java,Spring Boot,Ssl,Password Protection,Password Encryption,我们必须为通过springboot应用程序创建的RESTWeb服务使用ssl证书 现在,我知道了密码是使用证书所必需的。因此,我们正在使用openssl将可用的.pem(无密码)更改为.p12(有密码)。现在我们必须提供这个密码 问题是引入任何新密码所带来的开销 由于设计错误,我们无法在application.properties中硬编码此密码。因此,我们正在考虑找出在应用程序中使用密码的其他方法。到目前为止,我可以想到以下几种选择。哪一个更好,为什么 与其在application.proper

我们必须为通过springboot应用程序创建的RESTWeb服务使用ssl证书

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

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

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

  • 与其在application.properties中设置密码,不如从java代码中设置密码。(我不确定它是否会设置为环境变量或系统变量)

  • 使用环境变量存储密码

  • 使用存储密码的任何文本文件(由于设计不当,不再首选)


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

    对于提供的选项,我将使用选项2,通过使用环境变量,即使在集装箱化环境和云环境中,也可以更容易地提供和更改密码

    <>但是你也可以考虑其他的选择,比如使用一个安全的K-V存储。p>
    请注意,使用Vault或etcd,您还可以动态提供和更改证书,而不是将其与应用程序一起提供。

    我可以想出三种方法来实现这一点

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

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

    2。您可以将加密密码放入application.properties中,并在应用程序启动期间传递解密密钥。与弹簧靴配合得很好

    java-jar-Dmyapp.decryptKey=您的_KEY myapplication.jar


    3.您可以使用您可以通过以下方式实现您的场景

    我张贴示例\

    在属性文件中:

    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)
    

    如何从java代码设置这些属性。我将从代码中生成一些随机的一次性密码,并从代码中将其传递给属性。