我正在使用Spring Cloud Config一段时间。我需要保护配置数据。根据Spring Cloud Documentation已配置server.jks并添加到classpath。现在我能够加密和解密远程配置数据。
为了使配置服务器安全,我添加了spring security starter并分配了凭据(密码已解密)。由于某种原因,应用程序正在抛出它在类路径上没有密钥存储的激活。谷歌搜索了一段时间后,我发现密钥库应该转到bootstrap.yml而不是application.yml。这也不行,请指出我在这里缺少的东西。
请在git中找到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
答案 0 :(得分:1)
我遇到了这个问题。要在最新版本的 Spring Cloud 中设置对称加密,您只需使用所需的密钥(it建议将密钥设置为操作系统环境变量并在您的文件中引用该变量。这是为了更安全)
但是,当您发现引导程序文件中的属性不再导入时。您必须将以下依赖项添加到您的 pom 文件中才能加载该文件中的属性:
encrypt.key
完成此操作后,一切都会顺利进行。
答案 1 :(得分:0)
而不是使用环境变量传递bootstrap.yml。
-Dencrypt.keyStore.location = classpath:/server.jks -Dencrypt.keyStore.password = springcloudconfigserver -Dencrypt.keyStore.alias = springcloudconfigserver -Dencrypt.keyStore.secret = springcloudconfigserver
Config Server无法在bootstrap.yml中找到属性以实现非对称安全性。对称的工作得很好
答案 2 :(得分:0)
<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-rsa -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-rsa</artifactId>
<version>1.0.8.RELEASE</version>
</dependency>
我在配置客户端遇到了同样的问题。为了解决这个问题,我在pom.xml和bootstarp.properties/bootstrap.yml文件中添加了此依赖项,并在使用对称加密时添加了crypto.key属性。
希望有帮助。
答案 3 :(得分:0)
我遇到此错误,因为我的应用程序使用本地bootstrap.yml而不是服务器中的云配置。这就是为什么它无法解密而失败的原因。
确保本地bootstrap.yml具有此道具,该道具指示使用config.uri从服务器读取配置:
spring.cloud.config.enabled: true