在服务器中隐藏密钥

时间:2018-10-16 03:55:59

标签: java spring spring-boot java-8 environment-variables

我有一些服务器的api秘密密钥,必须在项目中使用。但是我对保留属性文件或服务器中的任何物理位置并不感到安全。谁能告诉我有什么可能的方法可以对其保密,并在应用程序需要的任何地方使用它。

2 个答案:

答案 0 :(得分:2)

如果真的考虑过您使用的密码,最好的方法是使用HSM(硬件安全模块)。这样,您可以放心,将私钥保存在安全的地方不再是您考虑的一部分。

如果这很昂贵,那么您可以考虑将私钥存储在JKS或PKCS12中并选择一个强密码。

通常,您正在寻找Vault。在PKI中,您可以使用一个保管库将您的秘密存储在其中。我可以想到几种方法。如上所述,其中一个是HSM,另一个是:

要存储密码,您需要对其加盐或将其存储在其他带有盐的服务器中,并且每当需要密码时,最好在真实服务器和仅存储密码的服务器之间建立安全连接以请求密码。< / p>

您也可以从Hashicorp看这个项目 https://github.com/hashicorp/vault

答案 1 :(得分:0)

这里有很多选项,具体取决于您的实际安全要求。 您已经提到了Java和Spring Boot,所以我将主要指定与此技术堆栈相关的解决方案。

由于您已经在使用Spring Boot,请考虑使用spring-cloud-config服务器。

它具有一些有趣的“加密”功能:

第1步

创建密钥(公共/私有对或共享取决于您的要求) 在启动配置服务器时指定它(通过-或env变量):

encrypt.key=ABC123ABC123ABC123

第2步

通过调用此服务器的其余请求来编码密码值(只需执行一次)

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

第3步

在application.properties中,使用特殊语法指定该值已“加密” 该文件将存储在配置服务器上,而不是微服务上。的 属性看起来像这样

db.password={cipher}AZXCASDAZXC341234ZXCASDFedr453 

该属性将在文件中保持加密,但在内存中解密。因此,微服务将获得解密后的值。

该文档可用here。到目前为止,这是实现要求的最快方法。您可以将其保留在专用的微服务中或嵌入到现有的应用程序中。

此外,它允许与JKS集成,因此可以在其中存储密码。

互补/替代

Spring cloud config还与Hashicorp Vault集成在一起,这可以单独解决您的情况(即使没有spring boot cloud config)。

然而,来自Spring Universe的另一种可能的解决方案称为Spring Vault 它用于处理秘密。

相关问题