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

news2024/11/16 13:40:40

小伙伴们知道,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 按钮,将项目编译安装到本地仓库:

接下来 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 项目中,在 Nacos 项目中引入这个插件的依赖,建议在 config 模块中引入,如下图:

引入内容如下:

<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,如下:

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

好啦,现在我们就可以像启动 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=8080

其他都正常配置即可。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

公众号免费搜题系统调用方法

公众号免费搜题系统调用方法 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xf…

SQL Server 服务的启动

目录 前言&#xff1a; 一、进入控制面板 二、开启 SQL Server 服务 1. 找到管理工具并点击 2. 双击服务 3. 找到SQL Server 数据库服务 4. 右键点击 SQL Server 服务&#xff0c;选择启动 三、修改 SQL Server 服务的启动方式 1. 右键点击服务&#xff0c;点击属性 …

激发客户潜在需求

企业不光要看到客户的显现需求&#xff0c;更要挖掘客户的潜在需求&#xff0c;因为客户的潜在需求是可以转化为显现需求的&#xff0c;满足客户的潜在需求可以为企业带来更多经济效益。 前言 潜在需求是指消费者虽然有明确意识的欲望&#xff0c;但由于种种原因还没有明确的显…

Redis的缓存更新策略和缓存问题

1.缓存更新 1.1缓存更新策略 内存淘汰&#xff1a; 不需要自己维护&#xff0c;利用Redis的内存淘汰机制&#xff0c;当内存不足时自动淘汰部分数据&#xff0c;下次查询时更新缓存一致性 &#xff1a; 差维护成本&#xff1a;无 超时删除&#xff1a; 给缓存数据添加TTL时间…

零基础自学javase黑马课程第十五天

零基础自学javase黑马课程第十五天 ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&#x1f39e;2022年11月21日&…

【案例设计】配置与批量化处理外部 Texture 导入格式转换

开发平台&#xff1a;Unity 2020 版本以上 编程平台&#xff1a;Visual Studio 2020 版本 编程语言&#xff1a;CSharp   前言 Unity 开发者不仅是要求在面对开发需求上有着预见性的目光与能力去应对各种功能实现。更加注重的是通过各个项目的开发类型与过程&#xff0c;总结…

计算机体系结构:不同改进方案的性价比计算

题目内容 某一计算机用于商业外贸的事务处理&#xff0c;有大量的字符串操作。由于这种事务处理很普遍&#xff0c;有较大的市场&#xff0c;故而设计人员决定在下一代此类计算机的CPU中加入字符串操作的功能。经测试应用软件调查发现&#xff0c;字符串操作的使用占整个程序运…

进程切换及一些常见概念(面试必问)

目录前言一、竞争性1、什么是进程的竞争性&#xff1f;2、为什么进程间存在竞争性&#xff1f;二、独立性#这里先简单了解三、并行四、并发五、优先级队列六、进程切换寄存器1. 函数返回值2. 进程上下文数据总结前言 在不同的进程在处理机上切换的过程中&#xff0c;我们需要学…

碳酸钙/GPC3单克隆抗体介导阿霉素二氧化硅纳米粒/DOX-GNRs@mSiO2-HA-RGD纳米制备方法

小编在这里整理了碳酸钙/GPC3单克隆抗体介导阿霉素二氧化硅纳米粒/DOX-GNRsmSiO2-HA-RGD纳米制备方法&#xff0c;来看&#xff01; 碳酸钙阿霉素二氧化硅纳米颗粒制备方法&#xff1a; 包括以下步骤&#xff1a; 将含有钙离子的乙醇溶液与含有氨水与盐酸阿霉素的水溶液混合,…

【Jupyter】远程连接Jupyter服务器

远程连接Jupyter 步骤一 配置Jupyter https://blog.csdn.net/MYRLibra/article/details/109599531 https://blog.csdn.net/weixin_40641725/article/details/114636779 安装 conda activate abc #激活虚拟环境 pip install jupyter #安装 jupyter notebook --generate-conf…

Webservice接口-WSDL文档【Webservice】

WSDL是一个用于精确描述Web服务的文档&#xff0c;WSDL文档是一个遵循WSDL-XML模式的XML文档。WSDL 文档将Web服务定义为服务访问点或端口的集合。在 WSDL 中&#xff0c;由于服务访问点和消息的抽象定义已从具体的服务部署或数据格式绑定中分离出来&#xff0c;因此可以对抽象…

python使用flask实现前后端分离通过前端修改数据库数据【全栈开发基础】

文章目录&#x1f68e;前言&#xff1a;&#x1f6fa;工具&#x1f693;截图&#x1f695;数据库截图&#x1f699;前端截图&#x1f698;代码&#x1f6b2;增加&#x1f355;前端 HTML&#x1f35f;后端 python&#x1f6f4; 删除&#x1f355;前端 HTML&#x1f35f;后端 pyt…

AMM 套利者

AMM 套利者 理由 以太坊和其他支持 EVM 的区块链上有很多 AMM。其中许多 AMM 是 UniswapV2 的分叉项目或与 UniswapV2 具有相同的接口。这些 AMM 的列表&#xff1a; Uniswap V2(以太坊)寿司交换&#xff08;以太坊&#xff09;煎饼掉期(BSC)MDEX(BSC/heco) ... 一旦相同代币…

SpiderPool - 云原生容器网络 IPAM 插件

SpiderPool 来源于容器网络落地实践的经验积累&#xff0c;是「Daocloud 道客」开源的原生容器网络 IPAM 插件&#xff08;github&#xff1a;https://github.com/spidernet-io/spiderpool&#xff09;&#xff0c;主要用于搭配 Underlay CNI 实现容器云平台精细化的管理和分配…

策略验证_指标买点分析技法_运用boll布林线指标选择买点

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

基于云原生网关的可观测性最佳实践

作者&#xff1a; 井轶 为什么要进行可观测性建设 可观测性并不是一个新词&#xff0c;该词来源于控制理论&#xff0c;是指系统可以由其外部输出推断其其内部状态的程度&#xff0c;随着 IT 行业几十年的发展&#xff0c;IT 系统的监控&#xff0c;告警&#xff0c;问题排查…

【附源码】计算机毕业设计JAVA学生信息管理系统

【附源码】计算机毕业设计JAVA学生信息管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

联想Filez助力知名生物制药企业 建立业务数据安全体系

苏州某生物制药企业是一家抗体研发企业&#xff0c;其研发生产基地设在苏州。主要从事临床样品&#xff08;原液和成品&#xff09;的开发和生产&#xff0c;致力于通过持之以恒的研发和专业的生产技术&#xff0c;以最快的速度实现生物制品的批准。 随着企业各项业务的快速发展…

Redis——》数据类型

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型5种基本类型3种特殊类型数据类型和底层数据结构5种基本…

第一个 GoWeb 程序,三款主流框架 Beego、Gin 和 Iris 快速入门

1、什么是web应用 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件。 一个Web应用程序是由完成特定任务的各种Web组件构成的并通过Web将服务展示给外界。…