我已经在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
6条答案
按热度按时间pb3skfrl1#
我遇到过这个问题,要在最新版本的spring cloud中设置对称加密,只需要在**bootstap.yml(或.properties)*中设置
encrypt.key
属性,并使用所需的密钥( 建议将密钥设置为OS环境变量,并在文件中引用该变量,这样更安全 *)但是,正如您所发现的,bootsrap文件中的属性不再被导入。您必须将以下依赖项添加到pom文件中,才能加载该文件中的属性:
做了这件事以后,一切都会顺利的.
xsuvu9jc2#
我在配置客户端也遇到了同样的问题,为了解决这个问题,我在
pom.xml
和bootstarp.properties
/bootstrap.yml
文件中添加了这个依赖项,我在使用对称加密时添加了encrypt.key
属性。希望能有所帮助。
tktrz96b3#
我在IntelliJ IDEA中运行项目时遇到了这个问题,项目结构如下:
该项目在启动时还使用了文件
config/application.yaml
,这就是发生此错误的原因。将
config
目录重命名为configuration
后,此问题得到解决。5jvtdoz24#
简单的答案是:将所有属性从
bootstrap.yaml
移动到application.yaml
。dgenwo3n5#
我遇到这个错误是因为我的应用程序使用本地
bootstrap.yml
而不是服务器中的云配置。这就是为什么它不能解密并且失败。确保本地
bootstrap.yml
具有此属性,该属性指示使用config.uri
从服务器读取配置:ssgvzors6#
而不是使用环境变量传递的
bootstrap.yml
。-Dencrypt.keyStore.location=classpath:/server.jks
-Dencrypt.keyStore.password=springcloudconfigserver
-Dencrypt.keyStore.alias=springcloudconfigserver
-Dencrypt.keyStore.secret=springcloudconfigserver
配置服务器无法在
bootstrap.yml
中找到非对称安全性的属性。对称安全性可以正常工作