Java 如何加密/解密Spring启动服务器属性

Java 如何加密/解密Spring启动服务器属性,java,spring,spring-boot,encryption,Java,Spring,Spring Boot,Encryption,我有一个使用SSL的spring引导应用程序。在我的属性文件中,我为我的密钥库密码定义了一个值,目的是不公开密码,因此我对密码进行了加密,并在spring boot中查看如何解密此密码值: server.port=8443 server.ssl.key-alias=selfsigned_certif server.ssl.key-password=JDHF7E879E7R79E7D9D7Fkdskjdhdkjsdghjsfdghsgfd server.ssl.key-store=classpat

我有一个使用SSL的spring引导应用程序。在我的属性文件中,我为我的密钥库密码定义了一个值,目的是不公开密码,因此我对密码进行了加密,并在spring boot中查看如何解密此密码值:

server.port=8443
server.ssl.key-alias=selfsigned_certif
server.ssl.key-password=JDHF7E879E7R79E7D9D7Fkdskjdhdkjsdghjsfdghsgfd
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
在我的例子中,我不能使用Jasypt,因为我们应该使用一个特定的开发库来加密和解密密码


有没有一种方法可以使用Spring boot实现密钥库属性的加密/解密?提前感谢

更新:对于重复的问题,有一个类似/更好的答案,正如在他的评论中所指出的


我们通过合并这个工具做了类似的事情。它很好地融入了春天的生态系统。基本上,您可以使用加密密钥(字符串)对值进行加密,并将加密的值放在属性文件中,该文件由
ENC(…)
包围。然后将加密密钥放入运行代码的服务器上的指定环境变量中。然后,您可以使用
@Value(…)
将加密值直接映射到变量中


另一种选择是根本不在源代码中存储密码,而是在环境变量中保护服务器上的密码,并在运行时直接访问它们。我认为,无论您以何种方式对其进行分割,最终都会依赖于服务器是安全的这一事实,因此您有信心您的服务器不会受到损害是很重要的。

如果您正在寻找与spring boot相关的答案,我建议您看看project

该项目允许在外部管理配置(例如在文件系统或git中),并支持通过对称私钥和公钥/私钥对加密属性值

在本例中,“受保护”属性如下所示:

db.password={cipher}AZXCASDAZXC341234ZXCASDFedr453
其中AZXCASDAZC341234ZXCASDFERD453实际上是某个密码的加密值。 为了对它进行加密,您应该调用一次“encrypt”方法,假设SpringCloudConfig服务器正在您机器的8888端口上运行

 $ curl localhost:8888/encrypt -d mysecretdbpassword >>AZXCASDAZXC341234ZXCASDFedr453
这里密码“mysecretdbopassword”的值被加密

必须在SpringCloudConfig微服务本身的配置中指定密钥

 encrypt.key=ABC123ABC123ABC123

此服务的另一个选项是与Hashicorp vault集成,因此,它也是保密的好选择。

您考虑过将敏感配置放入vault吗?在我的情况下,我不能使用Jasypt,因为我们应该使用特定的开发库来加密和解密密码在我的情况下,我不能使用Jasypt,因为我们应该使用特定的开发库来加密和解密密码解密密码在我的情况下,我不能使用Jasypt,因为我们应该使用一个特定的开发库来加密和解密密码在这种情况下,你可以借用这个想法:离线创建一个“加密”值,并为属性添加一些前缀,以便在运行时进行的解密将知道哪些属性应该被解密,哪些不应该被解密。您可以检查spring cloud config的源代码并在那里实现它,或者滚动您自己的属性加载器。我使用此库加密并解密属性文件中的值问题在于spring boot keys server.ssl.key-password。例如,此值我无法使用@value在代码中获取