我有一个使用 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 引导实现密钥库属性的加密/解密?提前致谢
如果你正在寻找与 spring boot 相关的答案,我建议你看看 spring-cloud-config 项目。
该项目允许在外部管理配置(例如,在文件系统或 git 中(,并且除其他外,还支持通过对称私有密钥和公钥/私钥对加密属性值
在这种情况下,"受保护"属性如下所示:
db.password={cipher}AZXCASDAZXC341234ZXCASDFedr453
其中AZXCASDAZXC341234ZXCASDFedr453实际上是某个密码的加密值。 为了加密它,你应该调用"encrypt"方法一次,假设spring-cloud-config服务器在机器的端口8888上运行。
$ curl localhost:8888/encrypt -d mysecretdbpassword >>AZXCASDAZXC341234ZXCASDFedr453
在这里,密码"mysecretdbopassword"的值被加密。
必须在 spring-cloud-config 微服务本身的配置中指定密钥。
encrypt.key=ABC123ABC123ABC123
此服务的另一个选项是与Hashicorp保管库集成,因此它也可以成为保守秘密的良好候选者。
更新:正如亚当在他的评论中指出的那样,这里有一个类似/更好的答案。
我们通过结合Jasypt工具做了类似的事情。 它很好地融入了春季生态系统。 基本上,您使用加密密钥(字符串(加密值,并将加密值放在由ENC(...)
包围的属性文件中。 然后,将加密密钥放在运行代码的服务器上的指定环境变量中。 然后,您可以使用@Value(...)
将加密值直接映射到变量中。
另一种选择是根本不将密码存储在源代码中,而是将服务器上的密码保存在环境变量中,并在运行时直接访问它们。 我认为无论您以何种方式对其进行切片,您最终都会依赖于服务器安全的事实,因此确信您的服务器不会受到损害非常重要。