【问题标题】:How I can encrypt/decrypt Spring boot server properties [duplicate]我如何加密/解密 Spring Boot 服务器属性 [重复]
【发布时间】:2019-02-28 09:52:22
【问题描述】:

我有一个使用 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 实现密钥库属性的加密/解密?在此先感谢

【问题讨论】:

  • 您是否考虑过将敏感配置放入保管库?
  • 在我的情况下,我不能使用 Jasypt,因为我们应该使用特定的开发库来加密和解密密码

标签: java spring spring-boot encryption


【解决方案1】:

如果您正在寻找与 Spring Boot 相关的答案,我建议您查看 spring-cloud-config 项目。

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

在这种情况下,“受保护”属性如下所示:

db.password={cipher}AZXCASDAZXC341234ZXCASDFedr453

其中 AZXCASDAZXC341234ZXCASDFedr453 实际上是某个密码的加密值。 为了加密它,你应该调用一次“加密”方法,假设 spring-cloud-config 服务器在你机器的 8888 端口上运行。

 $ curl localhost:8888/encrypt -d mysecretdbpassword >>AZXCASDAZXC341234ZXCASDFedr453

这里密码“mysecretdbopassword”的值被加密。

key 必须在 spring-cloud-config 微服务本身的配置中指定。

 encrypt.key=ABC123ABC123ABC123

此服务的另一个选项是与 Hashicorp 保险库集成,因此它也是保密的理想选择。

【讨论】:

  • 在我的情况下,我不能使用 Jasypt,因为我们应该使用特定的开发库来加密和解密密码
  • 在这种情况下,您可以借用这个想法:离线创建一个“加密”值,并为属性添加一些前缀,以便在运行时发生的解密将知道应该解密哪些属性和这不应该。你可以查看 spring-cloud-config 的源代码并在那里实现它,或者滚动你自己的属性加载器。
  • 我使用这个库来加密和解密我的属性文件中的值问题是弹簧启动密钥 server.ssl.key-password 例如这个值我无法使用@Value 在代码中获取它
【解决方案2】:

更新:正如Adam 在他的评论中指出的那样,here 的重复问题有一个相似/更好的答案。


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

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

【讨论】:

  • 在我的情况下,我不能使用 Jasypt,因为我们应该使用特定的开发库来加密和解密密码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-11
  • 2019-09-23
  • 1970-01-01
  • 2015-12-29
  • 2021-06-10
  • 2018-03-23
相关资源
最近更新 更多