确保Spring Cloud配置安全的最佳方法是什么?

时间:2018-12-10 09:11:29

标签: spring spring-cloud spring-cloud-config spring-cloud-bus

我有一个运行Spring总线的Spring Cloud配置服务器。我想确保对该服务器的调用安全:

  1. 当客户要求配置时。
  2. 调用/ monitor时-由网络挂钩使用。

最佳做法是什么?基本的?加密? 有人可以提供一个有效的例子吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以通过添加加密和解密属性来保护它

您需要提供jks来对其进行安全加密和解密

Spring云配置服务器支持对称和非对称密钥

要配置对称密钥,您需要将encrypt.key设置为秘密字符串(或使用ENCRYPT_KEY环境变量将其保留在纯文本配置文件之外)。

对于非对称,您需要在bootsrap.yml中提供以下属性:

server:
  port: 8888
spring:
  cloud:
    config:
      server:
        git:
          uri: your git url or your local repository on file system 
          username: username for git or bitbucket if needed
          password: password
          clone-on-start: true this property will clone all repo localy on starttup
          force-pull: true
  application:
     name: config-server
encrypt:
  key-store:
    location: jks location
    password: letmein
    alias: mytestkey
    secret: changeme

要生成jks,您需要执行此命令

keytool -genkeypair -alias mytestkey -keyalg RSA \
  -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" \
  -keypass changeme -keystore server.jks -storepass letmein

实际上,默认情况下,java对某些键长参数有限制。 默认情况下为128位。

要使用更多密钥长度,您只需替换local_policy.jar中现有的US_export_policy.jar<java-home>/lib/security

这里是下载链接:

https://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

您还可以通过此类端点对属性进行加密和解密:

curl config_server_host:port/encrypt-d your data to be encrypted

curl config_server_host:port/decrypt -d your data to be decrypted // this will automatically use this endpoint to decrypt values
//Both are http post requests

要通过配置服务器使用加密,您需要在应用程序的配置中提供此类前缀,以便从配置服务器获取配置:

'{cipher}your_encrypted_data'

答案 1 :(得分:0)

此外,您可以使用Spring Cloud Vault来控制对配置中机密的访问。

此解决方案比加密应用程序和配置服务器之间的所有通信更简单,但是也许这不是您想要的。

我希望它会有所帮助。