在 Spring Boot 中加密应用程序属性

Encrypting application properties in Spring Boot

提问人:mljohns89 提问时间:10/11/2017 更新时间:10/12/2017 访问量:5929

问:

因此,我做了一些谷歌搜索并阅读了一些关于Spring Cloud的文档,但为了真正惩罚自己,我试图确切地了解使用“{cipher}”加密敏感应用程序属性的真正工作原理。

例如,在 application.yml 中...

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

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

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

我还在 heroku 文档上找到了一个链接,您可以将其设置为服务器中的配置变量?

最重要的是,我有很多问题,最重要的是,我什至不确定我需要问什么问题。所以我希望那些知道他们在做什么的人可以给我指出一些正确的方向,一些链接可以阅读等,让我继续前进,请问?

提前致谢!

java spring-boot spring-cloud web-config-encryption

评论

0赞 Kayaman 10/11/2017
将任何密钥提交到存储库绝对不安全。您还需要确保使用正确的密码,因为您仍然容易受到暴力破解。
0赞 mp911de 10/12/2017
gitter.im/spring-cloud/spring-cloud 是与 Spring Cloud 团队取得联系的好地方。

答:

1赞 mp911de 10/12/2017 #1

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

如果无法控制对源代码存储库的访问,则不应将密钥等敏感数据提交到该存储库。不仅是常规访问,还有物理访问、备份......

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

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

评论

0赞 mljohns89 10/12/2017
如果我将我的“secret.key”存储在我的 bootstrap.yml 文件中,将该文件添加到我的 .gitignore 中,那么当我将我的 api 部署到 PaaS 时,这基本上是你所建议的吗?谢谢你的链接!这基本上就是我一直在寻找的:)
0赞 mp911de 10/12/2017
使敏感数据尽可能远离任何 SCM 存储库。通过这样做,您可以积极防止意外披露。尝试使用 PaaS 为你提供的安全功能。