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

  • 安装全功能JCE并替换JRE lib / security中的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
  • 为pom文件添加了 Cloud 安全依赖关系(在配置服务器和客户端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>
  • 添加了与加密相关的配置(配置服务器和客户端使用的相同值)到 bootstrap.yml 也尝试使用 application.yml
encrypt:
key-store:
    location: file:///D:/encrypt-server/config-server.jks
    password: keyPass
    alias: config-server-key
    secret: keys3crt
  • 我的配置服务器引导程序看起来像这样
spring:
  application:
    name: config-service
  cloud:
    config:
        server:
            git:
                uri: https://github.com/<>/spring-config-repo
            encrypt:
                enabled: false
server:
  port: 8888
  • 使用配置服务器加密passWord属性
curl -X POST --data-urlencode d3v3L \  http://localhost:8888/encrypt
  • 尝试使用配置服务器解密属性
curl  http://localhost:8888/decrypt  -d <encryptedVale>

我收到了以下错误

{"timestamp":1472667297292,"status":500,"error":"Internal Server Error","exception":"java.lang.IllegalStateException","message":"Cannot decrypt","path":"/decrypt"}
  • 我尝试使用配置客户端打印加密属性(注意:我添加了依赖关系并按照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;
}

}

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

  • 注意:我试图在配置服务器中解密

encrypt:
  enabled: false

如果我在这里遗漏任何东西,请告诉我 . 感谢任何帮助 .