【问题标题】:Spring Cloud Config not decrypting the config server passwordSpring Cloud Config 未解密配置服务器密码
【发布时间】:2016-06-26 14:37:29
【问题描述】:

我已经在 Spring Cloud Config 上工作了一段时间。我需要保护配置数据。根据 Spring Cloud 文档,我已经配置了 server.jks 并添加到类路径中。现在我可以加密和解密远程配置数据了。

为了使配置服务器安全,我添加了 Spring Security Starter 并分配了凭据(密码解密)。由于某种原因,应用程序抛出了类路径上没有密钥存储的异常。谷歌搜索了一段时间后,我发现密钥库应该转到 bootstrap.yml 而不是 application.yml。这也不起作用,我在这里缺少什么?

您可以在 GitHub 上找到 yml 配置文件: SpringConfigData

例外:

java.lang.IllegalStateException: Cannot decrypt: key=security.user.password
    at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.decrypt(EnvironmentDecryptApplicationInitializer.java:195) ~[spring-cloud-context-1.1.0.BUILD-SNAPSHOT.jar:1.1.0.BUILD-SNAPSHOT]
    at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.decrypt(EnvironmentDecryptApplicationInitializer.java:164) ~[spring-cloud-context-1.1.0.BUILD-SNAPSHOT.jar:1.1.0.BUILD-SNAPSHOT]
    at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.initialize(EnvironmentDecryptApplicationInitializer.java:94) ~[spring-cloud-context-1.1.0.BUILD-SNAPSHOT.jar:1.1.0.BUILD-SNAPSHOT]
    at org.springframework.cloud.bootstrap.BootstrapApplicationListener$DelegatingEnvironmentDecryptApplicationInitializer.initialize(BootstrapApplicationListener.java:333) ~[spring-cloud-context-1.1.0.BUILD-SNAPSHOT.jar:1.1.0.BUILD-SNAPSHOT]
    at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:640) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:343) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) [spring-boot-1.3.3.RELEASE.jar:1.3.3.RELEASE]
    at com.test.TestConfigServerApplication.main(TestConfigServerApplication.java:12) [classes/:na]
Caused by: java.lang.UnsupportedOperationException: No decryption for FailsafeTextEncryptor. Did you configure the keystore correctly?
    at org.springframework.cloud.bootstrap.encrypt.EncryptionBootstrapConfiguration$FailsafeTextEncryptor.decrypt(EncryptionBootstrapConfiguration.java:151) ~[spring-cloud-context-1.1.0.BUILD-SNAPSHOT.jar:1.1.0.BUILD-SNAPSHOT]
    at org.springframework.cloud.bootstrap.encrypt.EnvironmentDecryptApplicationInitializer.decrypt(EnvironmentDecryptApplicationInitializer.java:187) ~[spring-cloud-context-1.1.0.BUILD-SNAPSHOT.jar:1.1.0.BUILD-SNAPSHOT]
    ... 9 common frames omitted

【问题讨论】:

  • 您是否按照文档中的说明安装了 JCE? projects.spring.io/spring-cloud/docs/1.0.3/…
  • 是的,我已经设置好了。加密/解密适用于我的 svn 中的远程属性。
  • 在再次浏览文档后,我还有一个观察结果。我已经尝试了环境变量。 (-Dencrypt.keyStore.location=classpath:/server.jks -Dencrypt.keyStore.password=springcloudconfigserver -Dencrypt.keyStore.alias=springcloudconfigserver -Dencrypt.keyStore.secret=springcloudconfigserver) 这次它工作了。对于所有对不对称配置摸不着头脑的人来说,这是一种解决方法。

标签: spring-boot spring-cloud


【解决方案1】:

使用环境变量传递而不是bootstrap.yml

  • -Dencrypt.keyStore.location=classpath:/server.jks
  • -Dencrypt.keyStore.password=springcloudconfigserver
  • -Dencrypt.keyStore.alias=springcloudconfigserver
  • -Dencrypt.keyStore.secret=springcloudconfigserver

配置服务器 无法找到 bootstrap.yml 中的属性以实现非对称安全性。对称效果很好

【讨论】:

  • bootstrap.xml 不是有效文件,bootstrap.ymlbootstrap.properties 有效。
  • 抱歉,yml 文件中出现错字
【解决方案2】:
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-rsa</artifactId>
    <version>1.0.8.RELEASE</version>
</dependency>

我在配置客户端遇到了同样的问题。为了解决这个问题,我在pom.xmlbootstarp.properties/bootstrap.yml 文件中添加了这个依赖项,我在使用对称加密时添加了encrypt.key 属性。

希望对你有帮助。

【讨论】:

    【解决方案3】:

    我遇到此错误是因为我的应用程序使用本地 bootstrap.yml 而不是服务器中的云配置。这就是它无法解密并且失败的原因。

    确保本地bootstrap.yml 有这个属性,表示使用config.uri 从服务器读取配置:

    spring:
      cloud:
        config:
          enabled: true
    

    【讨论】:

      【解决方案4】:

      我遇到过这个问题。要在最新版本的 Spring Cloud 中设置对称加密,您只需在 bootstap.yml(或 .properties) 中使用所需的密钥设置 encrypt.key 属性(建议将密钥设置为操作系统环境变量并在文件中引用该变量。这是为了提高安全性)

      但是,正如您发现的那样,bootsrap 文件中的属性不再被导入。您必须将以下依赖项添加到您的 pom 文件中才能加载该文件中的属性:

      <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
      </dependency>
      

      完成此操作后,一切都会顺利进行。

      【讨论】:

        【解决方案5】:

        简单的答案是:将所有属性从bootstrap.yaml 移动到application.yaml

        【讨论】:

          【解决方案6】:

          我在 IntelliJ IDEA 中运行项目并具有以下项目结构时遇到了这个问题:

          .
          ├── config
          │   └── application.yaml
          ├── api-users
          │   ├── pom.xml
          │   └── src
          └── config-server
              ├── pom.xml
              └── src
          

          该项目在启动时也使用了文件config/application.yaml,这就是发生此错误的原因。

          config目录重命名为configuration后,这个问题就解决了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-09-26
            • 1970-01-01
            • 2017-01-27
            • 2020-07-19
            • 2018-05-08
            • 2015-07-13
            • 2016-11-26
            相关资源
            最近更新 更多