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  # 密钥库地址