文章目录
- 1. 前言
- 2. 安装插件
- 2.1 编译
- 2.2 客户端
- 2.3 服务端
- 3. 测试
1. 前言
为保证用户敏感配置数据的安全,Nacos
提供了配置加密的新特性。降低了用户使用的风险,也不需要再对配置进行单独的加密处理。
前提条件:
- 版本:老版本暂时不兼容,目前只基于
2.x
版本进行了改造,推荐版本> 2.0.4
。 - 数据库:表
config_info
、config_info_beta
、his_config_info
中需要新增字段encrypted_data_key
,用来存储每一个配置项加密使用的秘钥。新版本的默认创建表的sql
中已经添加该字段。- 内嵌数据库:如果之前使用过内嵌数据库的单机模式启动,则需要删除
nacos/data
文件夹,在重新启动会重新创建表。 MySQL
:对于目前已经搭建好的Nacos
使用以下sql
将字段添加到对应的表中:ALTER TABLE table_name ADD COLUMN 'encrypted_data_key' text NOT NULL COMMENT '秘钥'
- 内嵌数据库:如果之前使用过内嵌数据库的单机模式启动,则需要删除
注意事项: 目前各种Nacos
插件并不成熟,可能会有Bug
(不推荐生产环境使用)
2. 安装插件
Nacos
通过 SPI
的机制抽象出加密和解密的操作,默认提供 AES
的实现。用户也可以自定义加解密的实现方式。具体的实现在 nacos-plugin仓库。
在 Nacos
服务端启动的时候就会加载所有依赖的加解密算法,然后通过发布配置的 dataId
的前缀来进行匹配是否需要加解密和使用的加解密算法。
客户端发布的配置会在客户端通过filter
完成加解密,也就是配置在传输过程中都是密文的。而控制台发布的配置会在服务端进行处理。
Nacos
加解密插件是可插拔的,有没有都不影响 Nacos
的核心功能的运行。如果想要使用 Naocs
的配置加解密功能需要单独引用加密算法的实现。客户端和服务端都通过添加以下依赖来使用 AES
加解密算法,服务端推荐添加到 config
模块下。
2.1 编译
目前插件需要自己编译,并未上传至maven
中央仓库。在nacos-plugin地址下载源码,导入到IDEA
中,进行编译安装到本地仓库。
2.2 客户端
客户端(后台服务)引入默认的AES
加密插件:
<!--配置加密插件-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-aes-encryption-plugin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
2.3 服务端
参考Nacos 2.x 系列【11】源码启动服务端下载服务端源码,找到config
模块:
引入默认的AES
加密插件:
<!--配置加密插件-->
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-aes-encryption-plugin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
3. 测试
源码启动服务端,打开Nacos
控制台,点击新建配置,配置前缀使用以下格式来标识这个配置需要加密:
cipher-[加密算法名称]-dataId`
系统会自动识别并加密,例如使用 AES
算法来解密配置:
cipher-aes-application-dev.yml
这里添加order-demo
服务的配置:
配置文件内容如下:
spring:
application:
name: order-demo
cloud:
nacos:
# 服务端用户名密码
username: nacos
password: nacos
# 服务发现
discovery:
# 命名空间
namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
# 服务端地址,默认:127.0.0.1:8848
server-addr: 127.0.0.1:8848
# 配置中心
config:
namespace: 0faa0970-1179-4143-8aa2-cac3ee6b42ec
server-addr: 127.0.0.1:8848
# 导入配置
config:
import:
- nacos:cipher-aes-order-demo.yaml
点击保存,查看数据库,可以看到配置内容被加密:
自动生成的秘钥:
启动服务后台,正常获取到加密的配置并自动解密: