【问题标题】:unable to decrypt from spring config server / cleint无法从弹簧配置服务器/客户端解密
【发布时间】:2017-01-08 10:56:52
【问题描述】:

我正在尝试使用 Spring 配置服务器和客户端加密和解密配置属性。我有spring boot应用程序(服务器和客户端),使用服务器我加密了密码属性,在客户端我试图使用相同的密钥解密它但出现错误。 我正在尝试启用配置服务器客户端来解密这些最初由配置服务器加密的属性。 以下是我遵循的步骤:

  1. 安装全强度 JCE 并替换 JRE lib/security 中的 2 个策略文件

  2. 使用 keytool 生成密钥

    keytool -genkeypair -alias config-server-key -keyalg RSA \
    -keysize 4096 -sigalg SHA512withRSA -dname "CN=*.domain.com,OU=EUS,O=eusdom,L=City,S=WA,C=US" \
    -keypass keyPass -keystore config-server.jks -storepass keys3crt
    
  3. 在 pom 文件中添加了云安全依赖项(在配置服务器和客户端 pom 中都添加了这些)

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    
    <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-rsa</artifactId>
    <version>1.0.1.RELEASE</version>
    </dependency>
    
  4. 将加密相关配置(配置服务器和客户端使用的值相同)添加到bootstrap.yml 也尝试使用application.yml

    encrypt:
    key-store:
        location: file:///D:/encrypt-server/config-server.jks
        password: keyPass
        alias: config-server-key
        secret: keys3crt
    
  5. 我的配置服务器引导程序如下所示

    spring:
      application:
        name: config-service
      cloud:
        config:
            server:
                git:
                    uri: https://github.com/<>/spring-config-repo
                encrypt:
                    enabled: false
    server:
      port: 8888
    
  6. 使用配置服务器加密密码属性

    curl -X POST --data-urlencode d3v3L \  http://localhost:8888/encrypt
    
  7. 尝试使用配置服务器解密属性

    curl  http://localhost:8888/decrypt  -d <encryptedVale>
    

我遇到了错误

    {"timestamp":1472667297292,"status":500,"error":"Internal Server Error","exception":"java.lang.IllegalStateException","message":"Cannot decrypt","path":"/decrypt"}
  1. 我尝试使用配置客户端打印加密属性(注意:我已按照 3,4 添加了依赖项和加密密钥详细信息)

    @RefreshScope
    @Component
    @RestController
    public class Greeter {
    
    @Value("${cassandra.hostnames}")
    String hostnames;
    
    @Value("${cassandra.username}")
    String userName;
    
    @Value("${cassandra.password}")
    String passWord;
    
    @RequestMapping(value = "/", produces = "application/json")
    public List<String> index(){
        List<String> env = Arrays.asList(
            "userName is: " + userName,
            "passWord is: " + passWord,
    );
    return env;
    }
    

    }

  2. 我收到java.lang.IllegalStateException: Cannot decrypt: key=cassandra.password 错误

  3. 注意:我尝试在配置服务器中解密

     encrypt:
      enabled: false
    

    如果我在这里遗漏了什么,请告诉我。感谢任何帮助。

【问题讨论】:

    标签: encryption spring-boot spring-cloud-config


    【解决方案1】:

    默认情况下,您用于启用非对称加密的引导配置不再启用。如果您的项目需要它,可以通过属性或新的启动器重新启用它。 可以找到指南[这里] [1]:https://github.com/spring-cloud/spring-cloud-release/wiki/Spring-Cloud-2020.0-Release-Notes#breaking-changes

    要在大于 2.3.x 的 Spring Boot 版本中启用引导,我们需要添加 #SpringCloud 引入的新启动器依赖项。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.1</version>
        </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 2017-01-12
      • 2021-09-22
      • 1970-01-01
      • 2018-05-08
      • 2021-12-10
      • 2019-08-09
      相关资源
      最近更新 更多