小伙伴们知道,中置文Spring Cloud Config 很早就提供了配置文件的何加密加解密功能,并且支持对称加密和非对称加密两种不同的实现模式
。Nacos 作为分布式配置中心+服务注册中心的传输合体,在配置文件加密这块一直差点意思,中置文不过好在 ,何加密如果你使用的实现 Nacos 版本大于 2.0.4 这个版本 ,那么现在也可以通过插件的传输方式来实现配置文件加密了。 松哥在之前的中置文微服务视频中讲过,Spring Cloud Config 的何加密对称加密和非对称加密 ,高防服务器加密后的实现文件格式类似下面这样: 可以看到,在 Spring Cloud Config 中,传输对配置文件的中置文加密是针对字段一个一个加密的。 而 Nacos 中的何加密加密,则是实现对整个配置文件的内容进行加密 ,这点和 Spring Cloud Config 不同。 Nacos 中是通过 SPI 的机制抽象出加密和解密的免费模板操作,Nacos 默认提供 AES 对称加密的实现,不过用户也可以自定义加解密的实现方式。 在 Nacos 服务端启动的时候就会加载所有依赖的加解密算法
,然后通过发布配置的 dataId 的前缀来进行匹配是否需要加解密和使用的加解密算法。 客户端发布的配置会在客户端通过 filter 完成加解密 ,也就是源码库配置在传输过程中都是密文的,而控制台发布的配置会在服务端进行处理
。 换言之,用了 Nacos 的配置文件加密插件之后 ,我们在 Nacos 管理页面上配置的配置文件
,将会以加密的密文形式存储在数据库中,也会以密文的形式传输到客户端,然后在客户端自动完成解密操作。大致上就是香港云服务器这样一个过程。接下来我们就来看看具体的用法
。 首先我们需要下载 nacos 源码进行编译,编译完成之后,需要将之安装到本地 Maven 仓库(因为编译加密插件需要用到 Nacos)
。 首先 clone nacos 源码,如下 : 下载之后 ,个人建议用 IDEA 去编译
,操作方便一些(因为后续还有其他操作)。 所以我们先用 IDEA 打开项目,确认项目所需依赖均已下载完毕,然后点击 install 按钮
,将项目编译安装到本地仓库
: 接下来 clone 配置文件加解密的插件 ,如下: 也用 IDEA 打开这个插件项目。亿华云这个插件编译要用到我们刚刚编译安装好的 Nacos
,但是给的版本号不对,需要我们手动修改下,位置在 nacos-plugin/pom.xml ,修改里边 Nacos 的版本号 ,从 2.2.0-SNAPSHOT 改为 2.2.0-BETA(我刚刚编译安装的是这个版本 ,大家根据自己的实际情况选择): 改完之后也执行 install 操作,将所有的插件都安装到本地仓库: 接下来回到一开始的模板下载 Nacos 项目中
,在 Nacos 项目中引入这个插件的依赖,建议在 config 模块中引入,如下图: 引入内容如下 : 加了这个依赖之后 ,我们的 Nacos 就具备了配置文件加密功能了。 现在我再改一下 console/src/main/resources/application.properties 配置文件
,让 Nacos 将数据存入到本地数据库中,如下
: 配置完成后,本地提前准备好一个名为 nacos_config 的数据库
,并执行 distribution/conf/mysql-schema.sql 脚本文件 ,将所需的表先创建出来。 接下来,为项目添加启动参数 ,我们以单机而不是集群的方式来启动 Nacos,如下 : 上图大家重点看两个地方
,一个是启动类所处的位置 ,另外一个则是启动参数 。 好啦
,现在我们就可以像启动 Spring Boot 项目那样启动 Nacos 了。 如果我们想将项目打包发布的话 ,松哥建议大家先从 GitHub 上下载官方的压缩包
,官方的压缩包里边
,有一个 target 目录,这个目录下有一个 nacos-server.jar 文件 ,这个就是 nacos 的启动包了。对于这个官方的压缩包,大家正常配置就行了。 然后,在 IDEA 中,对我们刚刚处理过的 nacos,重新打包 ,不过记得打包的时候设置一下环境,如下: 设置好环境之后,然后对项目重新进行打包 。打包完成后
,生成了新的 nacos-server.jar,如下
: 用这个 jar 包替换掉官方压缩包中的 jar,然后启动 nacos 即可 。 启动成功之后,我们就可以直接访问 nacos 了
,用法和平时用法都一样,不同的是,在创建配置文件的时候,文件名有一个固定的前缀 cipher-aes-,有了这个前缀,这个配置文件就会自动加密 ,否则就不会加密 。 例如我现在创建如下配置文件: 创建完成后,我们去数据库中看一下这个配置文件: 可以看到 ,这个 content 字段已经是一个加密的字符串了(如果没有我们没有加密
,则 content 字段保存的就是明文 name=javaboy)
。 现在我们创建一个项目,来加载这个加密的配置文件。 创建项目时候 ,选择 Nacos Configuration ,如下: 创建好之后,记得手动加上刚刚的那个加密插件的依赖(解密的时候会用到)
。 项目名称记得设置为 cipher-aes-nacos: 其他都正常配置即可
。1. 配置文件加密
2. 实践
图片
图片
图片
图片3. 发布
图片
图片4. 访问
图片
图片
图片