在 Spring 引导中加密应用程序属性

Encrypting application properties in Spring Boot

因此,我进行了一些谷歌搜索并阅读了一些有关 Spring Cloud 的文档,但为了真正惩罚自己,我正在努力了解如何使用加密技术来加密敏感的应用程序属性“{cipher}”确实有效。

例如在 application.yml...

Spring.datasource.password: '{cipher} abdjdbdjfb15168gddbdk3900289'

我的理解是,将其提交到 repo 是安全的,并且 spring 引导使用 bootstrap.yml 中的 encrypt.key 以便在需要时对其进行解密。

我不明白的是为什么将 encrypt.key 提交到回购是安全的?如果你不这样做,那我应该如何利用它?

我还在 heroku 文档中发现了一个 link,您可以将其设置为服务器中的配置变量吗?

最重要的是,我有很多问题,最重要的是,我什至不确定我需要问什么问题。所以我希望外面有人知道他们在做什么,可以为我指明一些 link 阅读等的正确方向,让我继续前进吗?

提前致谢!

首先,查看 Spring Cloud Config 中关于 encryption 的参考文档,其中解释了配置支持的可能性。

如果您无法控制对源代码存储库的访问,您应该永远不要提交敏感数据(例如密钥)到源代码存储库。不仅是常规访问,还有物理访问、备份……

处理密钥的首选方法是将密钥存储在尽可能少的位置,理想情况下仅存储在发生解密的服务器端。您可以选择使用 bootstrap 配置、系统属性或环境变量作为将密钥传递给运行时的机制。

您可能想了解一下 HashiCorp Vault support,因为 Vault 解决了密钥管理的先有鸡还是先有蛋的问题。相反,您可以获得一个 Vault 令牌(从您的客户端应用程序内部,或在服务器上配置一个令牌)并且 Vault 将为您处理 encryption/decryption。