Spring cloud conf 配置中心 加密和解密(对称加解密和非对称加解密)
前言
在使用Spring Cloud Config的加密解密功能时,有一个必要的前提需要我们注意。为了启用该功能,我们需要在配置中心的运行环境中安装不限长度的JCE版本(Unlimited Strength Java Cryptography Extension)。虽然,JCE功能在JRE中自带,但是默认使用的是有长度限制的版本。我们可以从Oracle的官方网站中下载到它,它是一个压缩包,解压后可以看到下面三个文件:
jdk8对应的下载链接:jdk8的jce下载地址,然后放在jdk的jre的security目录下即可。
可以尝试用postman或者浏览器通过GET请求访 http://localhost:8000/encrypt/status 端点,我们将得到如下内容:
{
"description": "The encryption algorithm is not strong enough",
"status": "INVALID"
}
该返回说明当前配置中心的加密功能还不能使用,因为没有为加密服务配置对应的密钥。
对称加解密
bootstrap.yml配置:
encrypt:
key: xiefei
加入上述配置信息后,重启配置中心,再访问 http://localhost:8000/encrypt/status 端点,我们将得到如下内容:
{
"status": "OK"
}
此时,我们配置中心的加密解密功能就已经可以使用了
我们可以用/encrypt端点加密/decrypt端点解密,注意,这两个端点都是POST请求:
加密:
解密:
使用:
在yml文件中,必须以英文半角单引号括起来加密值,前面加{cipher}
server:
port: '{cipher}132ee3fe0253b1164081c8acb0d7c851952f0a4194815de0e3227a459793e0b1'
在properties文件中, 不要加引号
port={cipher}132ee3fe0253b1164081c8acb0d7c851952f0a4194815de0e3227a459793e0b1
我们通过配置encrypt.key参数来指定密钥的实现方式采用了对称性加密。这种方式实现比较简单,只需要配置一个参数即可。
非对称加解密
1.使用keytool生产证书
keytool -genkeypair 命令帮助
-alias <alias> 要处理的条目的别名
-keyalg <keyalg> 密钥算法名称
-keysize <keysize> 密钥位大小
-sigalg <sigalg> 签名算法名称
-destalias <destalias> 目标别名
-dname <dname> 唯一判别名
-startdate <startdate> 证书有效期开始日期/时间
-ext <value> X.509 扩展
-validity <valDays> 有效天数
-keypass <arg> 密钥口令
-keystore <keystore> 密钥库名称
-storepass <arg> 密钥库口令
-storetype <storetype> 密钥库类型
-providername <providername> 提供方名称
-providerclass <providerclass> 提供方类名
-providerarg <arg> 提供方参数
-providerpath <pathlist> 提供方类路径
-v 详细输出
-protected 通过受保护的机制的口令
2.使用keytool生成证书
keytool -genkeypair -alias testkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass secret1 -keystore server.jks -storepass password1
3.将生产的证书server.jks 放到resource下
4.在server端的bootstrap.xml添加配置
#非对称加密
encrypt:
key-store:
location: classpath:/server.jks
password: password1 #生成时填写的
alias: testkey #生成时填写的
secret: secret1 #生成时填写的
5.配置文件中配置信息加密,同对称加密的配置方式一致
(完)
还没有评论,来说两句吧...