私は非常に基本的な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 Services にデプロイした場合も、ローカルで実行した場合と同じように機能することを期待しています。
暗号化されたキーを使用して構成を公開サーバーにデプロイしました。
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 で機能させるために追加する必要がある他のプロパティはありますか? 暗号化されていない値は同じ構成内で適切に機能しているため、すべてが適切に配線されています。機能していないのは、暗号化された値だけです。