【问题标题】:Is there a way to use Spring Cloud {cipher} in Spring Boot application config?有没有办法在 Spring Boot 应用程序配置中使用 Spring Cloud {cipher}?
【发布时间】:2015-04-09 20:53:13
【问题描述】:

我有一个使用 Spring Cloud Config 的 Spring Boot 应用程序,但我想在 Spring Boot 应用程序 bootstrap.yml 文件中加密 Spring Cloud Config 密码。有没有办法做到这一点?下面是一个例子。

Spring Boot 应用 bootstrap.yml

spring:
  cloud:
    config:
      uri: http://locahost:8888
      username: user
      password: '{cipher}encryptedpassword'

【问题讨论】:

    标签: spring-boot spring-cloud


    【解决方案1】:

    我发现了一些与此相关的事情。

    如果使用 bootstrap.yml(或 application.yml),密文格式必须用单引号括起来:

    security.user.password: '{cipher}56e611ce4a99ffd99908d2c9aa1461d831722812e4370a5b6900b7ea680ae914'  
    

    如果你使用 bootstrap.properties(或 application.properties),密文的格式一定不能包含:

    security.user.password= {cipher}56e611ce4a99ffd99908d2c9aa1461d831722812e4370a5b6900b7ea680ae914
    

    [参考文档][1] 显示不带引号的 yml,我从来没有工作过。 SnakeYaml 总是报错:

    "expected <block end>, but found Scalar"
    

    【讨论】:

    • .properties 文件使用 =,而不是 ":"
    【解决方案2】:

    您可以使用 Spring CLI 加密秘密 spring encrypt password --key 'SECRET_KEY'

    https://cloud.spring.io/spring-cloud-cli/

    【讨论】:

      【解决方案3】:

      配置客户端支持加密属性(如user guide 中所述)。显然,如果你这样做,你必须提供一个密钥来在运行时解密属性,所以实际上我并不总是看到好处(我想配置文件有点像一个特殊格式的密钥库,所以你只有一个秘密要保护,而不是许多)。示例(application.yml):

      integration:
        stores:
          test: '{cipher}316f8cdbb776c23e679bf209014788a6eab7522f48f97114328c2c9388e6b3c1'
      

      和密钥(在 bootstrap.yml 中):

      encrypt:
        key: ${ENCRYPT_KEY:} # deadbeef
      

      【讨论】:

      • 谢谢戴夫。我不确定我昨天做错了什么,但我无法让它发挥作用。我将 ENCRYPT_KEY 设置为操作系统环境变量。我今天又试了一次,它工作正常。
      • 对于遇到相同问题的任何人,Intellij(可能还有其他 IDE)在启动期间会加载环境变量...因此要加载新的/更改的环境变量,需要关闭并重新启动 Intellij。
      猜你喜欢
      • 2016-06-01
      • 2020-02-21
      • 2016-06-07
      • 2020-03-07
      • 2016-07-03
      • 2018-07-14
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      相关资源
      最近更新 更多