微服务实战|集中配置中心config对称加密实战(代码片段)

_时光煮雨 _时光煮雨     2022-12-06     624

关键词:

前言

上一篇:微服务实战|集中配置组件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,正常返回了加密后的明文:

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

回忆一下,在上一篇文章中,我们使用eureka作为注册中心,将producer注册到eureka,并且在consumer中通过eureka发现producer服务进行调用,让我们来分析一下,这样是否已经足够完美,还有没有什么问题?1.首先,eureka没有任何安全验证,任何应用都... 查看详情

github轻松阅读微服务实战项目流程详解第四天:账户服务的设计与实现(代码片段)

FourDay1.配置文件精解(1)boootstrap.yml(2)配置中心的yml文件2.Config(1)书架线程池配置(2)Mybatis及其Swagger配置(3)Redis配置(4)公用线程池配置(5)数据源配置gith 查看详情

springcloudalibaba微服务实战一-基础环境准备(代码片段)

...在这么火,我一直想写个基于SpringcloudAlibaba一步一步构建微服务架构的系列博客,终于下定决心从今天开始本系列文章的第一篇-基础环境准备。该系列文章内容主要基于三个微服务:用户服务AccountService,订单服务OrderService,产... 查看详情

springcloud微服务实战

参考技术A阅读《Spring微服务实战》笔记项目地址:https://gitee.com/liaozb1996/spring-cloud-in-action配置管理原则:SpringCloudConfig后端存储:文件系统、Git标注引导类:配置服务器配置:创建配置文件:访问配置:客户端配置:spring-cloud-co... 查看详情

架构微服务实战:从发布到架构——下篇

 MaxLeap 2016-03-2513:53上篇文章介绍了微服务和单体架构的区别、微服务的设计、消息、服务间通信、数据去中心化,本篇会继续深入微服务,介绍其它特性。 治理去中心化通常“治理”的意思是构建方案,并且迫... 查看详情

13.go语言高并发与微服务实战---综合实战:秒杀系统的设计与实现

13.综合实战:秒杀系统的设计与实现 秒杀系统设计原则: 1.数据要尽量少 2.请求数尽量少 3.路径要尽量短 4.依赖要尽量少 5.尽量不要有单点       查看详情

13.go语言高并发与微服务实战---综合实战:秒杀系统的设计与实现

13.综合实战:秒杀系统的设计与实现 秒杀系统设计原则: 1.数据要尽量少 2.请求数尽量少 3.路径要尽量短 4.依赖要尽量少 5.尽量不要有单点       查看详情

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

??回忆一下,在上一篇文章中,我们创建了两个springboot项目,并且在consumer项目中通过restTemplate进行HTTP通信,成功访问到了producer提供的接口,思考一下这样的实现方式有什么问题???1.consumer必须知道producer的IP,才能调用对方的HTTP接口,并... 查看详情

3.21go微服务实战(微服务实战)---持续交付

第21章 持续交付21.1 持续交付简介 21.1.1 手动部署 21.1.2 持续交付的好处 21.1.3 持续交付面面观 21.1.4 持续交付的过程21.2 容器编排的选项和基础架构21.3 Terraform 21.3.1 提供者 21.3.2 Terraform配置入口点 21.3.3 VPC模块 21.3.... 查看详情

3.21go微服务实战(微服务实战)---持续交付

第21章 持续交付21.1 持续交付简介 21.1.1 手动部署 21.1.2 持续交付的好处 21.1.3 持续交付面面观 21.1.4 持续交付的过程21.2 容器编排的选项和基础架构21.3 Terraform 21.3.1 提供者 21.3.2 Terraform配置入口点 21.3.3 VPC模块 21.3.... 查看详情

微服务实战:选择微服务部署策略

 微服务实战(一):微服务架构的优势与不足微服务实战(二):使用APIGateway微服务实战(三):深入微服务架构的进程间通信微服务实战(四):服务发现的可行方案以及实践案例微服务实践(五):微服务的事件驱动... 查看详情

chrisrichardson微服务实战系列

微服务实战(一):微服务架构的优势与不足微服务实战(二):使用APIGateway微服务实战(三):深入微服务架构的进程间通信微服务实战(四):服务发现的可行方案以及实践案例微服务实践(五):微服务的事件驱动数据... 查看详情

springcloudalibaba微服务实战三十|统一资源服务器配置模块

前面文章咱们对比过网关授权与微服务授权的区别,文章也提到了,如果要实现微服务授权,一般会构建一个独立的资源服务器配置模块,否则每个后端业务都需要进行资源服务器的配置,那本节内容我们就来完成此功能。由于... 查看详情

1.springcloud微服务实战---基础知识

第1章 基础知识 1.什么是微服务架构 2.与单体系统的区别 3.如何实施微服务 1.服务组件化 2.按业务组织团队 3.做"产品"的态度 4.智能端点和哑管道 5.去中心化治理 6.去中心化管理数据 7.基础设施自动化 8.容错设计 4.为什... 查看详情

springcloudalibaba微服务实战教程系列

一、应用系列     Docker安装MySql完整教程、实操 使用到的mysql数据库的安装方案。     Docker安装AlibabaNacos教程  docker安装单实例或集群的Nacos的注册中心方便快速开始。    实现Nacos服... 查看详情

spring-cloud微服务实战:微服务的概念与演进过程

本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战。在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程。1.单体架构   在互联网时... 查看详情

基于springcloud的微服务实战

1引言1.1目的本博文是基于springboot+springcloud实现的微服务架构改造,提供对研发人员的技术架构支持。版本0.0.1主要实现了四个模块的功能:服务生产者,服务消费者,服务注册中心,客户端负载均衡。后续还会根据项目进展进... 查看详情

spring-cloud微服务实战:负载均衡ribbon

在实战三中,我们曾说到,我们需要一种机制,可以在访问服务的时候不需要关心IP,并且还能提供类似Nginx的负载均衡的功能,其实在上一篇文章中我们已经使用过spring-cloud的负载均衡功能了,还记得我们在配置restTemplate的时候加的注... 查看详情