Spring Cloud Config未解密配置服务器密码

dw1jzc5e  于 2023-03-18  发布在  Spring
关注(0)|答案(6)|浏览(264)

我已经在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
pb3skfrl

pb3skfrl1#

我遇到过这个问题,要在最新版本的spring cloud中设置对称加密,只需要在**bootstap.yml(或.properties)*中设置encrypt.key属性,并使用所需的密钥( 建议将密钥设置为OS环境变量,并在文件中引用该变量,这样更安全 *)
但是,正如您所发现的,bootsrap文件中的属性不再被导入。您必须将以下依赖项添加到pom文件中,才能加载该文件中的属性:

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

做了这件事以后,一切都会顺利的.

xsuvu9jc

xsuvu9jc2#

<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属性。
希望能有所帮助。

tktrz96b

tktrz96b3#

我在IntelliJ IDEA中运行项目时遇到了这个问题,项目结构如下:

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

该项目在启动时还使用了文件config/application.yaml,这就是发生此错误的原因。
config目录重命名为configuration后,此问题得到解决。

5jvtdoz2

5jvtdoz24#

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

dgenwo3n

dgenwo3n5#

我遇到这个错误是因为我的应用程序使用本地bootstrap.yml而不是服务器中的云配置。这就是为什么它不能解密并且失败。
确保本地bootstrap.yml具有此属性,该属性指示使用config.uri从服务器读取配置:

spring:
  cloud:
    config:
      enabled: true
ssgvzors

ssgvzors6#

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

  • -Dencrypt.keyStore.location=classpath:/server.jks
  • -Dencrypt.keyStore.password=springcloudconfigserver
  • -Dencrypt.keyStore.alias=springcloudconfigserver
  • -Dencrypt.keyStore.secret=springcloudconfigserver
    配置服务器无法在bootstrap.yml中找到非对称安全性的属性。对称安全性可以正常工作

相关问题