我有一个使用SSL的spring boot应用程序。在我的属性文件中,我为密钥存储区密码定义了一个值,其想法是不公开公开密码,因此我对密码进行了加密,并且我在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实现密钥库属性的加密/解密的方法?预先感谢
答案 0 :(得分:1)
更新:here在其评论中指出,对于重复的问题Adam,有类似/更好的答案。
我们通过合并Jasypt工具做了类似的事情。它很好地融入了Spring生态系统。基本上,您可以使用加密密钥(字符串)对值进行加密,然后将加密后的值放入由ENC(...)
包围的属性文件中。然后,将加密密钥放入运行代码的服务器上的指定环境变量中。然后,您可以使用@Value(...)
将加密后的值直接映射到变量中。
另一种选择是根本不将密码存储在您的源中,而是将密码保护在服务器上的环境变量中,并在运行时直接访问它们。我认为,以任何方式对其进行切片都会最终依赖于服务器是安全的这一事实,因此确保您的服务器不会受到损害非常重要。
答案 1 :(得分:1)
如果您正在寻找与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保险库集成,因此它也可以很好地保守秘密。