Spring Cloud Config 加密/解密剖析
在 spring-cloud 项目中配置了
encrypt.rsa
,配置了
encrypt.key-store
,那么她就是用 RSA 来加密数据?非也。真正加密数据的目前使用的是两种算法:一种是默认的
AES/CBC/PKCS5Padding
,一种是强力加密的
AES/GCM/NoPadding
,当设置
encrypt.rsa.strong=true
时,使用的是
AES/GCM/NoPadding
。而
encrypt.key-store
指定的RSA密钥是用来加密随机生成的 AES 密钥。那为什么要这么做呢?这涉及到 RSA 算法的特性和服务器性能考虑。而这种加密方式,也是现今网络安全通信方式的一种常规变种,接下来,我来详细剖析。
encrypt
配置详解
encrypt.*
相关属性,由两个属性配置类定义(
package org.springframework.cloud.bootstrap.encrypt
):
-
KeyProperties
-
RsaProperties
这两个类在
spring-cloud-context
这个组件库中,我们来看看相关的配置:
encrypt:
key: 12345678 # 对称加密密钥
salt: deadbeef # 对称加密盐
fail-on-error: true|false # 如果加密/解密失败,是否响应错误
rsa:
algorithm: default|oaep # RSA算法
strong: false|true # 是否使用健壮的AES加密
salt: 1234567890 # 生成 AES 密钥的盐
key-store:
alias: MyAlias # 使用的密钥库中的密钥的别名
location: classpath:/META-INF/security/my-server.jks # 密钥库地址