我有一个 ConfigServer,非常基础:
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
我正在使用 spring-cloud-config-server:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
我希望它在部署到 Pivotal Web 服务时的工作方式与我在本地运行时一样。
我使用加密密钥将我的配置部署到公共服务器:
spring:
cloud:
config:
server:
git:
uri: https://mypublic.domain/gitbasedconfig
在我的 bootstrap.yml、application.yml 中,我有一个带有密钥的属性:
encrypt:
key: my.super.secret.symmetric.key
这一切都在本地工作:
curl http://localhost:8888/myservice/default
以正确解密的所有加密密码进行响应。
当我使用以下 manifest.yml 将相同的工件部署到 PWS 时:
---
applications:
- name: myservice
memory: 384M
disk: 384M
buildpack: java_buildpack
path: target/myservice.jar
env:
ENCRYPT_KEY: my.super.secret.symmetric.key
如果我部署有或没有 env->ENCRYPT_KEY 都不起作用。当我调用该服务时,我所有的加密密钥都返回为
invalid.my.key.name: "<n/a>",
在 PWS 日志中,我可以看到:
Fri May 20 2016 13:26:21 GMT-0500 (CDT) [APP] OUT {"timeMillis":1463768781279,"thread":"http-nio-8080-exec-4","level":"WARN","loggerName":"org.springframework.cloud.config.server.encryption.CipherEnvironmentEncryptor","message":"Cannot decrypt key: my.key.name (class java.lang.IllegalArgumentException: Unable to initialize due to invalid secret key)","endOfBatch":false,"loggerFqcn":"org.apache.commons.logging.impl.SLF4JLocationAwareLog","contextMap":[],"source":{"class":"org.springframework.cloud.config.server.encryption.CipherEnvironmentEncryptor","method":"decrypt","file":"CipherEnvironmentEncryptor.java","line":81}}
当我查看http://myservice.on.pws/env时,我可以看到 application.yml、bootstrap.yml 中都有 encrypt.key 的值,我还可以看到环境值。这些都是相同的值。
当我在属性文件和/或环境中提供对称密钥值时,为什么我的加密值没有被正确解密?是否需要添加一些其他属性才能在 PWS 上进行这项工作?未加密的值在相同的配置中正常工作,因此一切都正确连接。只是加密的值不起作用。