小伙伴们晓得,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 配置文件加密就实现啦~