我正在尝试使用 Spring 配置服务器和客户端加密和解密配置属性。我有spring boot应用程序(服务器和客户端),使用服务器我加密了密码属性,在客户端我试图使用相同的密钥解密它但出现错误。我正在尝试启用配置服务器客户端来解密这些最初由配置服务器加密的属性。以下是我遵循的步骤:
安装 Full-strength 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 文件添加了云安全依赖项(在配置服务器和客户端 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
使用配置服务器加密密码属性
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
如果我在这里遗漏任何东西,请告诉我。感谢任何帮助。