当前位置:首页 > IT资讯

Nacos 中的配置文件如何实现加密传输

小伙伴们知道 ,中置文Spring Cloud Config 很早就提供了配置文件的何加密加解密功能 ,并且支持对称加密和非对称加密两种不同的实现模式。Nacos 作为分布式配置中心+服务注册中心的传输合体 ,在配置文件加密这块一直差点意思,中置文不过好在,何加密如果你使用的实现 Nacos 版本大于 2.0.4 这个版本,那么现在也可以通过插件的传输方式来实现配置文件加密了 。

1. 配置文件加密

松哥在之前的中置文微服务视频中讲过,Spring Cloud Config 的何加密对称加密和非对称加密 ,高防服务器加密后的实现文件格式类似下面这样:

复制name={ cipher}密文 password={ cipher}密文1.2.

可以看到,在 Spring Cloud Config 中,传输对配置文件的中置文加密是针对字段一个一个加密的 。

而 Nacos 中的何加密加密,则是实现对整个配置文件的内容进行加密 ,这点和 Spring Cloud Config 不同  。

Nacos 中是通过 SPI 的机制抽象出加密和解密的源码库操作,Nacos 默认提供 AES 对称加密的实现 ,不过用户也可以自定义加解密的实现方式。

在 Nacos 服务端启动的时候就会加载所有依赖的加解密算法 ,然后通过发布配置的 dataId 的前缀来进行匹配是否需要加解密和使用的加解密算法。

客户端发布的配置会在客户端通过 filter 完成加解密   ,也就是源码下载配置在传输过程中都是密文的 ,而控制台发布的配置会在服务端进行处理。

换言之,用了 Nacos 的配置文件加密插件之后,我们在 Nacos 管理页面上配置的配置文件,将会以加密的密文形式存储在数据库中 ,也会以密文的形式传输到客户端,然后在客户端自动完成解密操作 。大致上就是服务器租用这样一个过程。接下来我们就来看看具体的用法。

2. 实践

首先我们需要下载 nacos 源码进行编译 ,编译完成之后 ,需要将之安装到本地 Maven 仓库(因为编译加密插件需要用到 Nacos)。

首先 clone nacos 源码 ,如下 :

复制git clone https://github.com/alibaba/nacos.git1.

下载之后  ,个人建议用 IDEA 去编译 ,操作方便一些(因为后续还有其他操作) 。

所以我们先用 IDEA 打开项目,确认项目所需依赖均已下载完毕 ,然后点击 install 按钮,将项目编译安装到本地仓库 :

图片

接下来 clone 配置文件加解密的插件 ,如下:

复制git clone https://github.com/nacos-group/nacos-plugin.git1.

也用 IDEA 打开这个插件项目。建站模板这个插件编译要用到我们刚刚编译安装好的 Nacos,但是给的版本号不对,需要我们手动修改下 ,位置在 nacos-plugin/pom.xml,修改里边 Nacos 的版本号,从 2.2.0-SNAPSHOT 改为 2.2.0-BETA(我刚刚编译安装的是这个版本,大家根据自己的实际情况选择)  :

复制<alibaba-nacos.version>2.2.0-BETA</alibaba-nacos.version>1.

改完之后也执行 install 操作 ,将所有的插件都安装到本地仓库 :

图片

接下来回到一开始的亿华云 Nacos 项目中,在 Nacos 项目中引入这个插件的依赖 ,建议在 config 模块中引入 ,如下图:

图片

引入内容如下:

复制<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-aes-encryption-plugin</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>1.2.3.4.5.

加了这个依赖之后 ,我们的 Nacos 就具备了配置文件加密功能了 。

现在我再改一下 console/src/main/resources/application.properties 配置文件 ,让 Nacos 将数据存入到本地数据库中 ,如下:

复制### Count of DB: db.num=1 spring.sql.init.platform=mysql ### Connect URL of DB: db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&cnotallow=1000&socketTimeout=3000&autoRecnotallow=true&useUnicode=true&useSSL=false&serverTimeznotallow=UTC db.user=root db.password=1231.2.3.4.5.6.7.

配置完成后,本地提前准备好一个名为 nacos_config 的数据库,并执行 distribution/conf/mysql-schema.sql 脚本文件,将所需的表先创建出来 。

接下来 ,为项目添加启动参数 ,我们以单机而不是集群的方式来启动 Nacos,如下:

图片

上图大家重点看两个地方 ,一个是启动类所处的位置 ,另外一个则是启动参数 。

好啦,现在我们就可以像启动 Spring Boot 项目那样启动 Nacos 了 。

3. 发布

如果我们想将项目打包发布的话,松哥建议大家先从 GitHub 上下载官方的压缩包 ,官方的压缩包里边 ,有一个 target 目录 ,这个目录下有一个 nacos-server.jar 文件,这个就是 nacos 的启动包了。对于这个官方的压缩包 ,大家正常配置就行了。

然后 ,在 IDEA 中,对我们刚刚处理过的 nacos ,重新打包,不过记得打包的时候设置一下环境 ,如下 :

图片

设置好环境之后,然后对项目重新进行打包 。打包完成后,生成了新的 nacos-server.jar,如下 :

图片

用这个 jar 包替换掉官方压缩包中的 jar,然后启动 nacos 即可 。

4. 访问

启动成功之后 ,我们就可以直接访问 nacos 了,用法和平时用法都一样,不同的是 ,在创建配置文件的时候,文件名有一个固定的前缀 cipher-aes-,有了这个前缀,这个配置文件就会自动加密 ,否则就不会加密 。

例如我现在创建如下配置文件:

图片

创建完成后,我们去数据库中看一下这个配置文件:

图片

可以看到 ,这个 content 字段已经是一个加密的字符串了(如果没有我们没有加密,则 content 字段保存的就是明文 name=javaboy)。

现在我们创建一个项目 ,来加载这个加密的配置文件 。

创建项目时候,选择 Nacos Configuration,如下 :

图片

创建好之后 ,记得手动加上刚刚的那个加密插件的依赖(解密的时候会用到)。

项目名称记得设置为 cipher-aes-nacos:

复制# 应用名称 spring.application.name=cipher-aes-nacos # 应用服务 WEB 访问端口 server.port=80801.2.3.4.

其他都正常配置即可 。

分享到:

滇ICP备2023006006号-31