数据传输加密
功能描述
Vastbase适配光电安辰密码卡在主备传输场景下支持数据传输加密功能,即在主备传输场景下数据库服务之间传输数据时可以调用加密卡对数据进行加解密,包括以下功能:
数据库服务之间建立连接时进行密钥协商。
数据库服务之间根据协商的密钥各自进行收发数据时的加密与解密。
注意事项
使用该功能必须配置光电安辰密码卡,并配置相关的系统环境变量,具体配置请参考使用流程。
该功能只包含使用libpq驱动连接的方式。
该功能加解密算法只支持SM4 CTR模式的算法。
服务端开启硬件加密功能时客户端需要使用
-h
进行网络连接才能进入硬件加密模式,即客户端vsql在连接数据库时要指定-h
选项,成功进行硬件加密传输连接时会输出如下信息:硬件加密传输需要进行密钥协商,可能会出现服务器与服务端连接超时的情况,此时需要调整连接的超时时间,如果备库启动时连接主库可能出现超时的情况,此时可以调整wal_receiver_connect_timeout的值。
wal_receiver_connect_timeout
参数说明: 设置连接主机的最大等待超时时间。
取值范围: 整型,0 ~ 2147483,单位秒
默认值: 2s
支持RAC功能。
使用流程
1、服务器已配置光电安辰密码卡,并配置了相关的系统环境变量,具体步骤如下:
(1)配置光电安辰密码卡。
(2)获取光电安辰的硬件动态库文件(libskf.so、libsdf.so),并将库文件拷贝到数据库实例所在目录下,使库文件和hwcipher.so处在同一目录(可自定义路径)。
(3)在~/.bashrc文件中配置如下环境变量:
设置环境变量CRYPTDEV_LIBPATH为动态库所在路径(不需要包含动态库名称)。
设置环境变量CRYPTDEV_TYPE=gdaccard表示使用光电安辰密码卡进行数据传输加密。
2、分别在主库与备库服务启动前开启各自硬件加密传输功能的GUC参数、配置密钥索引值、权限访问码。
GUC参数
hw_trans_enc_enable
参数说明:是否开启硬件传输加密功能。
取值范围:布尔型
- on:表示开启硬件传输加密功能。
- off:表示关闭硬件传输加密功能。
默认值:off
配置密码索引值
环境变量:CRYPTDEV_PRIVATE_KEY_INDEX
说明:设备内部存储加密密钥的索引值,用于参与密钥协商,在开启hw_trans_enc_enable参数后需要在数据库中配置该环境变量。
取值范围:[1,16]的整数。
- 配置权限访问码
环境变量:CRYPTDEV_KEY_ACCESS_PWD
说明:验证私钥使用权限的可用字,在开启hw_trans_enc_enable参数后需要在数据库中配置该环境变量。
取值范围:不少于8字节的无符号字符,需要于创建密钥时设定的访问码一致。
3、启动主备库数据库服务。
4、客户端使用-h
参数连接主库进行业务操作,输出结果及行为应与未加密时一致。
5、客户端使用-h
参数连接备库进行业务操作,输出结果及行为应与未加密时一致。
示例
1、服务器已安装配置光电安辰密码卡并搭建好了主备集群环境。
2、已经通过密码卡创建加密密钥对,并记录密钥索引为001和签名私钥的私钥访问控制码为Aa123456。
3、在~/.bashrc文件中配置环境变量。
vi ~/.bashrc
添加如下内容(CRYPTDEV_LIBPATH已实际路径为准):
export CRYPTDEV_TYPE=gdaccard
export CRYPTDEV_LIBPATH=/home/wzr1
export CRYPTDEV_PRIVATE_KEY_INDEX=1
export CRYPTDEV_KEY_ACCESS_PWD='Aa123456';
4、重新加载配置文件。
source ~/.bashrc
5、启动数据库。
vb_ctl start
6、打开会话1,在root用户下使用tcpdump抓包查看数据是否被加密传输(其中端口号和网卡名称以实际为准)。
tcpdump -s 1000 -i lo(网卡名称) dst net 127.0.0.1 and port 端口号 -XvvnnAx
7、打开会话2,连接数据库,执行创建、修改、删除用户/角色等操作。
vsql -d vastbase -r -h 127.0.0.1
create user test1 with password'Test@123';
create role test2 identified by 'Test@123';
alter user test1 password 'Test@1234';
alter role test2 identified by 'Test@1234' replace 'Test@123';
alter user test1 rename to test1a;
alter role test2 sysadmin;
drop user test1a;
drop role if exists test2;
8、会话1显示抓包的结果没有明文信息,表示数据是加密传输的。