微服务实战|集中配置中心Config对称加密实战

Posted _时光煮雨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务实战|集中配置中心Config对称加密实战相关的知识,希望对你有一定的参考价值。

前言

上一篇:微服务实战|集中配置组件Config规避敏感信息泄露

上一篇文章中,我们介绍了使用集中配置中心组件Config实现了敏感信息的集中管理。但是,在配置文件中,配置信息依然使用的是明文,今天我们将介绍一下使用Config实现敏感信息的安全管理、配置文件的加密解密等机制。

一、加密算法

不可逆加密就是大家熟知的在 Spring Security 或者 Shiro 这一类安全管理框架中我们对密码加密经常采取的方案。这种加密算法的特点就是不可逆,即理论上无法使用加密后的密文推算出明文,常见的算法如 MD5 消息摘要算法以及 SHA 安全散列算法等。

可逆算法顾名思义,这种算法是可以根据密文推断出明文的,在我们的配置文件,我们要存放加密的密文,但是使用的时候还是需要解密后明文才能使用,所以需要使用可逆算法进行加密,可逆算法又分为两大类:

  • 对称加密是指加密的密钥和解密的密钥一致,例如 A 和 B 之间要通信,为了防止别人偷听,两个人提前约定好一个密钥。每次发消息时, A 使用这个密钥对要发送的消息进行加密,B 收到消息后则使用相同的密钥对消息进行解密。这是对称加密,常见的算法有 DES、3DES、AES 等。

  • 非对称加密就是加密的密钥和解密的密钥不是同一个,加密的密钥叫做公钥,可以公开告诉任何人,解密的密钥叫做私钥,只有自己知道。非对称加密不仅可以用来做加密,也可以用来做签名,使用场景还是非常多的,特别是在一些一对多的通信场景下,常见的加密算法是 RSA 。

可逆算法中的对称加密和非对称加密在 Spring Cloud Config 中都得到支持,下面我们就开始实战。

二、Config对称加密实战

1、下载加密包

Java 中提供了一套用于实现加密、密钥生成等功能的包 JCE(Java Cryptography Extension),这些包提供了对称、非对称、块和流密码的加密支持,但是默认的 JCE 是一个有限长度的 JCE ,我们需要到 Oracle 官网去下载一个不限长度的 JCE :JCE加密包官网下载

下载完成后,将压缩包解压后的文件拷贝到 JDK 的安装目录下: %JAVA_HOME%\\jre\\lib\\security

2、配置秘钥

继续修改我们的config-server项目,在resource下创建一个bootstrap.yml文件,内容如下:

encrypt:
  key: 123456

因为使用的是对称加密算法,将加密和解密的秘钥设置为123456。

3、启动验证

启动config-server项目,验证一下加密解密是否正常:

访问http://localhost:8005/encrypt/status,返回ok

再来访问http://localhost:8081/encrypt 加密接口:

再来访问http://localhost:8081/encrypt 解密接口:

一切正常,能够正常加密和解密。

4、项目实战

加密和解密功能正常之后,就要修改我们的配置文件内容了,将之前使用明文的地方,改成我们的密文。

继续修改我们的config-server项目,在repo文件夹下,修改客户端的配置文件configclient-dev.yml,增加如下内容:

app:
  key: 'cipher5ab3ce1502c40c276074f400aee0be0f6279d6a85bb9d8d315a78c7a91603dde58d4512a6bc9f6492a8eddd34dbeeac0'

注意密文前面增加cipher,这样才能正常解密。

然后修改客户端config-client项目,增加一个访问接口:

/**
 * @Author:公众号:程序员965
 * @create 2022-07-17
 **/
@RestController
public class ConfigController 
    @Value("$app.key")
    String appKey;

    @GetMapping("/hello")
    public String hello() 
        return appKey;
    

5、验证

最后,再次重启registry项目以及config-server,config-client两个服务,访问client端的hello接口:http://localhost:8007/hello,正常返回了加密后的明文:

以上是关于微服务实战|集中配置中心Config对称加密实战的主要内容,如果未能解决你的问题,请参考以下文章

8.Go语言高并发与微服务实战 --- 分布式配置中心

GitHub轻松阅读微服务实战项目流程详解第四天:账户服务的设计与实现

SpringCloud微服务实战学习系列配置详解

.Net微服务实战之可观测性

Spring-cloud微服务实战:eureka注册中心(下)

微服务实战|声明式服务调用OpenFeign实践