首页 > 其他分享 >Nacos 中的配置文件如何实现加密传输

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

时间:2022-12-04 10:03:55浏览次数:42  
标签:加密传输 插件 加密 配置文件 加解密 Nacos nacos


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

1. 配置文件加密

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

name={cipher}密文
password={cipher}密文

可以看到,在 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.git

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

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

Nacos 中的配置文件如何实现加密传输_原力计划

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

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

也用 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>

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

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

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

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

引入内容如下:

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

加了这个依赖之后,我们的 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&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=123

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

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

Nacos 中的配置文件如何实现加密传输_原力计划_04

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

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

3. 发布

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

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

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

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

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

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

4. 访问

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

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

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

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

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

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

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

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

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

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

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

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

其他都正常配置即可。

好啦,大功告成!Nacos 配置文件加密就实现啦~


标签:加密传输,插件,加密,配置文件,加解密,Nacos,nacos
From: https://blog.51cto.com/u_9806927/5909911

相关文章

  • ssm四个配置文件的相关解释
    一.解释1.application-config.xml1.1总的配置文件,将三个配置联系在一起。2.spring-dao.xml2.1管理数据流层,导入并管理mybatis.xml。2.2mybatis.xml管理数据库连接,操作......
  • SSM配置文件整合
    SSM配置文件整合1.ApplicationContext.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="ht......
  • shell读取配置文件中的参数
    shell读取配置文件中的参数配置文件配置文件config.properties如下:user=bkage=25ip=192.168.37.1 一、使用cat+awk语句过滤并赋值变量user=`catconfig.proper......
  • Spring Cloud GateWay基于nacos如何去做灰度发布
    如果想直接查看修改部分请跳转动手-点击跳转本文基于ReactiveLoadBalancerClientFilter使用RoundRobinLoadBalancer灰度发布灰度发布,又称为金丝雀发布,是一种新旧版本......
  • pip 生成requirement配置文件,快速安装配置环境
    pip生成requirement配置文件,快速安装配置环境在当前目录下生成requirements.txt文件pipfreeze>./requirements.txt按照requirement配置文件,快速配置环境pipinst......
  • 基于Nacos实现日志级别的动态切换
    想要实现日志级别动态切换有两个要点:1.监听Nacos配置文件修改2.根据配置动态设置当前日志级别监听Nacos监听类代码:packagecom.yibing.nacosprovider.listener;impor......
  • typesafe读取配置文件
    typesafe可以读取properties文件、.config文件1.pom<dependency><groupId>com.typesafe</groupId><artifactId>config</artifact......
  • Eclipse中建立struts2的配置文件struts.xml
    Eclipse中建立struts2的配置文件struts.xml的步骤:1、解压最新的struts2包文件,我用的是:struts-2.5.16-all.zip(上Struts的官网下载),然后找到struts-2.5.dtd所在路径并复制......
  • Winsw将jar-bat-nacos-seata-nginx等快捷部署为windows服务
    Winsw将jar-bat-nacos-seata-nginx等快捷部署为windows服务1.软件下载WinSW的github下载地址:https://github.com/winsw/winsw/releases本文以WinSWv2.11.0为例2.注意......
  • .NET CORE读取自定义配置文件到Configuration中
    微软只提供了以下可以读取配置的方式,其中文件配置只能读取INI、JSON和XML文件,如果我想对其他自定义文件进行读取,那么我们可以使用自定义配置提供程序进行配置  比如,......