【问题标题】:Why are my EnableConfigServer encrypt.key / ENCRYPT_KEY not working on Pivotal Web Services?为什么我的 EnableConfigServer encrypt.key / ENCRYPT_KEY 在 Pivotal Web 服务上不起作用?
【发布时间】:2016-05-20 18:32:42
【问题描述】:

我有一个 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: "&lt;n/a&gt;",

在 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 上进行这项工作?未加密的值在相同的配置中正常工作,因此一切都正确连接。只是加密的值不起作用。

【问题讨论】:

  • 我想知道 PWS 是否安装了 Java Cryptography Extensions (JCE)。
  • 我不认为 PWS 有它,Oracle 不会让它与 openjdk buildpack 捆绑在一起。您需要自定义 buildpack 才能使其正常工作。
  • 你们中的一个人给出了答案。这就是原因。

标签: spring-cloud pivotal-web-services spring-cloud-config


【解决方案1】:

我认为 Spencergibb 和 Vinicius Carvalho 都是正确的。

Java Cryptopgraphy Extensions 不能与标准 java buildpack 一起分发。

Pivotal 支持站点提供了一个可能的解决方案,即分叉 javabuildpack 并更新它以包含 JCE 的适当权限。使用自定义 buildpack 部署应用程序。一个警告是你/我不会得到自动更新。

https://support.run.pivotal.io/entries/76559625-How-do-I-use-the-JCE-Unlimited-Strength-policy-with-my-Java-app-

【讨论】:

  • 我只是按照支持网站上的说明进行操作,并确认这是问题所在。我现在正在运行一个包含 JCE 的自定义 java buildpack。
  • Java 构建包现在包括对 JCE 无限强度加密的支持:lists.cloudfoundry.org/archives/list/…
猜你喜欢
  • 2017-09-25
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2014-04-30
  • 2019-01-31
相关资源
最近更新 更多