Spring cloud conf 配置中心 加密和解密(对称加解密和非对称加解密)

迷南。 2023-08-17 16:20 223阅读 0赞

前言

在使用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 端点,我们将得到如下内容:

  1. {
  2. "description": "The encryption algorithm is not strong enough",
  3. "status": "INVALID"
  4. }

该返回说明当前配置中心的加密功能还不能使用,因为没有为加密服务配置对应的密钥。

对称加解密

bootstrap.yml配置:

  1. encrypt:
  2. key: xiefei

加入上述配置信息后,重启配置中心,再访问 http://localhost:8000/encrypt/status 端点,我们将得到如下内容:

  1. {
  2. "status": "OK"
  3. }

此时,我们配置中心的加密解密功能就已经可以使用了

我们可以用/encrypt端点加密/decrypt端点解密,注意,这两个端点都是POST请求:

加密:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODUwODEz_size_16_color_FFFFFF_t_70

解密:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODUwODEz_size_16_color_FFFFFF_t_70 1

使用:

在yml文件中,必须以英文半角单引号括起来加密值,前面加{cipher}

  1. server:
  2. port: '{cipher}132ee3fe0253b1164081c8acb0d7c851952f0a4194815de0e3227a459793e0b1'

在properties文件中, 不要加引号

  1. port={cipher}132ee3fe0253b1164081c8acb0d7c851952f0a4194815de0e3227a459793e0b1

我们通过配置encrypt.key参数来指定密钥的实现方式采用了对称性加密。这种方式实现比较简单,只需要配置一个参数即可。

非对称加解密

1.使用keytool生产证书

keytool -genkeypair 命令帮助

  1. -alias <alias> 要处理的条目的别名
  2. -keyalg <keyalg> 密钥算法名称
  3. -keysize <keysize> 密钥位大小
  4. -sigalg <sigalg> 签名算法名称
  5. -destalias <destalias> 目标别名
  6. -dname <dname> 唯一判别名
  7. -startdate <startdate> 证书有效期开始日期/时间
  8. -ext <value> X.509 扩展
  9. -validity <valDays> 有效天数
  10. -keypass <arg> 密钥口令
  11. -keystore <keystore> 密钥库名称
  12. -storepass <arg> 密钥库口令
  13. -storetype <storetype> 密钥库类型
  14. -providername <providername> 提供方名称
  15. -providerclass <providerclass> 提供方类名
  16. -providerarg <arg> 提供方参数
  17. -providerpath <pathlist> 提供方类路径
  18. -v 详细输出
  19. -protected 通过受保护的机制的口令

2.使用keytool生成证书

  1. 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添加配置

  1. #非对称加密
  2. encrypt:
  3. key-store:
  4. location: classpath:/server.jks
  5. password: password1 #生成时填写的
  6. alias: testkey #生成时填写的
  7. secret: secret1 #生成时填写的

5.配置文件中配置信息加密,同对称加密的配置方式一致

(完)

发表评论

表情:
评论列表 (有 0 条评论,223人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JAVA-对称加密AES解密示例

    这几天在解决报文中敏感字段传输问题时,由于对AES对称加密不熟悉,遇到了不少问题。特此记录,多的不说,直接上代码!代码中做了向量的异或(generateIv),如无特殊需要,可