在达梦数据库上使用密码设备上的国密算法详细操作指南

达梦数据库目前与山东渔翁的SJK1861-G 5.0密码卡兼容良好,下面详细描述其适配操作步骤。

1、密码卡设备安装

机器断电(彻底拔除电源线)冷却5分钟后,将密码卡设备固定在机箱内的PCI-E插槽里,并用螺丝固定好,确保不松动、不摇晃。

备注:渔翁密码卡“SJK1861-G PCI-E 5.0密码卡”已不支持任何的windows系统,必须安装在linux系列的系统中,可以是国产系统。

2、检测密码卡设备被操作系统识别

以root用户身份运行lspci命令,确保列出的设备中有一行是“464d”,证明密码卡设备本身是安装好的,也就是不用再重新插拔密码卡。不同型号的密码卡代号不一样,“SJK1861-G PCI-E 5.0密码卡”密码卡的代号是“464d”,其他型号的密码卡可能不是该标识。 如果不确定密码卡被识别的代号,可以在安装密码卡设备之前运行一次 lspci,截图下来;安装密码卡之后运行一次 lspci,截图下来;两个截图做一个比较,如果第二次截图比第一次截图多出一行:“Unclassified device”,表明密码卡设备是安装好的。如果两次截图的行数和内容完全一样,表明密码卡设备是未被识别,未安装好的。

root@FT10565:/home/fhx#lspci

0a:00.0 Unclassified device [00ff]: Device 464d:0810 (rev 01)

如果没有 “464d”这一行,需要重新关机、断电、拔除电源、冷却5分钟或在拔除电源的情况下按开机键进行快速放电、拆机箱、重新拔除密码卡设备、重新插上密码卡设备、螺丝固定密码卡、开机,再检测密码卡设备是否被系统识别,直到该命令出现“464d”这行。

当金手指部分沾了灰尘的时候或没插稳固的情况下,会识别不出来,除此之外,基本上都能识别。

3、密码卡驱动安装

  1. 用root用户身份给altera_cvp_load、install.sh、setup.sh赋予执行权限
  1. root@FT10565:/home/fhx/fishman20200528/drv#chmod 777 altera_cvp_load
  2. root@FT10565:/home/fhx/fishman20200528/drv#chmod 777 install.sh
  3. root@FT10565:/home/fhx/fishman20200528/drv#chmod 777 setup.sh

b)用root用户身份运行setup.sh

root@FT10565:/home/fhx/fishman20200528/drv# ./setup.sh

./altera_cvp_load

Check old driver and unload it.

Install driver.

当setup.sh命令执行后,打印信息的最后一行是“Install driver.”表明驱动是安装成功的,如果最后一行是“Card not detected!”或其他的报错信息,表明驱动是安装不成功的,不成功的情况,我们采取卸载密码卡驱动后重新安装密码卡驱动。

备注:密码卡驱动程序是和操作系统内核紧密相关的,因此每个不同的平台都要不同的驱动程序,如centos7、rh6、kylin10上的驱动都不一样,而且有时候和机器上的gcc运行库版本或操作系统补丁包版本等有关联,最坏的情况下是两台同一个光盘安装的centos7系统的机器要用2个不同的驱动程序。

可以以密码卡售后技术支持或项目合作等方式联系山东渔翁的售后技术支持团队给编译驱动,他们的售后还是相当给力的,一般情况下1-2天会给出对应的驱动,最长不过3天。可以让他们用远程的方式指导安装驱动过程中的各种错误,驱动安装首次不成功的概率非常大,需要耐心操作,需要时应该及时联系设备厂商协助。

4、重装密码卡驱动

当首次驱动安装不成功,则需要重新卸载驱动再安装驱动,卸载驱动就是一个清理操作,清理历史操作残留的驱动程序碎片文件。

root@FT10565:/home/fhx/fishman20200528/drv#rmmod FM_CPC_DRV

root@FT10565:/home/fhx/fishman20200528/drv#./setup.sh

重装密码卡驱动如还不能排除“Card not detected!”或其他的报错信息,则需要“关机+放电”进行再次尝试,“关机+放电”的一般步骤是“关机(shutdown -r)->断电->拔除电源->按开机键放残余电(3次)->冷却3分钟->开机”。

5、跟踪日志追踪密码卡驱动安装的问题

如果“关机+放电”也还是不能排除错误,则需要将跟踪日志发给密码卡厂商分析,跟踪日志的获取步骤是:

dmesg >dmesg_$(date "+%Y_%m_%d_%H_%M_%S").log

再将dmesgxxx.log发给渔翁售后技术支持,让他们判断驱动的问题,重新发个驱动再安装。

6、开卡测试密码卡

当密码卡设备及驱动均安装成功以后,需要执行TestCard开卡测试密码卡是否正常运行。

cd /home/fhx/fishman20200528/api

./TestCard

依次输入8、0、1、1:

         #    8. FM_DEV_TYPE_PCIE_5_0X   #

Please select card type:8

Please input card index(0~3):0

         #    1. Device Management #

Please select:1

         #    1. Get Device Information #

Please select:1

******************** DEVICE INFO ********************

*       Issuer Name:Fisherman

*       Device Name:PCI-E V5.0

*       Device Serial:C1350190509B0765

*       DeviceVersion:e5.c.2005

*

*       Symmetric Algorithm:SM1 SM4 AES 3DES DES

*       Asymmetric Algorithm:SM2

*       HASH Algorithm:SHA1 SM3

能够获取到如上格式的“DEVICE INFO”表示密码卡开卡成功。如果驱动没有安装成功,开卡能够成功,也可以忽略驱动问题,只要开卡测试成功就OK。开卡成功后,按0,再按0退出TestCard程序。root退出是为了让dmdba用户后面能用数据库所带的引擎程序去开卡和使用密码卡。

7、删除root独占的日志文件和root独占的锁文件

cd /tmp

rm -rf *card.lg

rm -rf FM*.lock

如果这2个文件存在而dmdba却没有读写权限,dmdba则不能输出日志和写锁文件,dmdba用户后面用数据库所带的引擎程序去开卡和使用密码卡的时候就会受阻。

8、编译密码引擎库文件。

密码引擎是调用密码卡API动态库提供的功能函数,将其封装成《达梦安全管理手册》“密码引擎”接口的一个C/C++格式的源代码文件,该文件一般形式是enc_dll_pcie5.c,需要将其编译成适应于该平台该系统的动态库文件,如libenc_dll.so. 编译方法如下表格:

1、修改宏定义:

    根据卡的型号,修改源文件enc_dll_pcie5.c中的下述宏定义,改为对应版本的渔翁版本的宏定义,如5改成6

     FM_DEV_TYPE_PCIE_5_0X

     这个根据卡的型号对应的宏定义来改,卡的型号及宏定义由卡厂商提供告知。

           

2、准备源文件:

    把源码文件enc_dll_pcie5.c 复制到对应操作系统准备编译的目录,如假定/home/test/fhx目录下;

3、准备头文件:

    把密码卡厂商提供的应用编程头文件放到源码所在目录的include子目录下,如假定/home/test/fhx/include目录下;再把达梦加密引擎头文件crypto_engine.h也放到/home/test/fhx/include目录下;

4、准备动态库文件:          

     把渔翁的应用编程动态库libfmapiv100.so放到/home/test/fhx目录下;

           

5、编译加密引擎库文件:

    进入到/home/test/fhx目录,用下述命令编译成libenc_dll.so

 gcc -shared -o libenc_dll.so -I./include enc_dll_PCIE5_0X.c -ldl -lm -lc -lrt -lpthread -lfmapiv100 -L./

            或:

 gcc -fPIC -shared -o libenc_dll.so -I./include enc_dll_PCIE5_0X.c -ldl -lm -lc -lrt -lpthread -lfmapiv100 -L./

备注:可能平台、架构等不同,gcc带的参数有所变化,上述是2个常见的命令。

9、拷贝密码卡的API动态库文件及密码引擎库文件。

密码卡的API动态库:libfmapiv100.so   (这个文件是卡厂商提供,不同厂商该文件名不同)

密码引擎库文件:libenc_dll.so (这个文件是上述编译而来的)

cd /home/fhx/fishman20200528/api/

cp libfmapiv100.so /home/dmdba/dmdbms/bin/

cp libfmapiv100.so /home/dmdba/dmdbms/bin/external_crypto_libs

cp libfmapiv100.so /home/dmdba/dmdbms/tool

cp libfmapiv100.so /home/dmdba/dmdbms/tool/external_crypto_libs

cd /home/test/fhx

cp libenc_dll.so /home/dmdba/dmdbms/bin/

cp libenc_dll.so /home/dmdba/dmdbms/bin/external_crypto_libs

cp libenc_dll.so /home/dmdba/dmdbms/tool

cp libenc_dll.so /home/dmdba/dmdbms/tool/external_crypto_libs

备注:放入bin及之下的external_crypto_libs文件夹是为了启动服务时可以调用密码卡上的算法,放入tool及之下的external_crypto_libs文件夹是为了启动界面客户端及DBCA初始化时可以调用密码卡上的算法。

另外还需要注意上述拷入的动态库文件,dmdba文件必须具备执行权。

        

10、设置环境变量PATHLD_LIBRARY_PATH,将上述放在最前面。

将下述内容写入/home/dmdba/.bash_profile

DM_HOME=/home/dmdba/dmdbms

PATH=$DM_HOME/bin:$DM_HOME/bin/external_crypto_libs:$PATH

LD_LIBRARY_PATH=$DM_HOME/bin:$DM_HOME/bin/external_crypto_libs:$LD_LIBRARY_PATH

PATH=$DM_HOME/tool:$DM_HOME/tool/external_crypto_libs:$PATH

LD_LIBRARY_PATH=$DM_HOME/tool:$DM_HOME/tool/external_crypto_libs:$LD_LIBRARY_PATH

export PATH

export LD_LIBRARY_PATH

执行source /home/dmdba/.bash_profile 让环境变量设置及时生效。

11、以dmdba用户身份启动disql

cd /home/dmdba/dmdbms/bin

./disql

如果运行打印有“load libfmapiv100.so success!”字样,表明前面所有的设置都是正确的。

如果出现了“load libfmapiv100.so fail”表明环境变量未设置好。

12、以dmdba用户初始化库并前台启动库。

cd /home/dmdba/dmdbms/bin

./dminit path=../data

./dmserver ../data/DAMENG/dm.ini

如果运行打印有“load libfmapiv100.so success!”字样,表明前面所有的设置都是正确的。如果出现了“load libfmapiv100.so fail”表明环境变量未设置好。前台启动的目的就是看打印信息,只要打印信息正确了之后就可以后台启动或服务方式启动。

13、查看数据库中的加密算法加载情况。

登录后查询系统表V$ciphers或V$external_ciphers动态视图,如果有“FM_SM”打头的算法,表明密码卡加密算法加载成功,否则加载不成功。

select * from V$ciphers;

select * from V$external_ciphers;

V$ciphers包括所有的算法,包括达梦内置算法和外部算法;V$external_ciphers仅包含外部算法。当密码卡加载成功后,应该有“FM_SM1_CBC、FM_SM1_ECB、FM_SM4_CBC、FM_SM4_ECB、FM_SM2、FM_SM3”等算法,其中SM1和SM4是对称加密算法,可用于存储加密,用法和AES、DES、DESEDE(3DES)一样;SM3是校验算法,可用于完整性校验,用法和MD5、SHA1一样;SM2是公钥加密算法,和RSA类似,一般用于根钥存储保护、签名和验签等数据库内部安全机制运作,数据库内的用户较少显式调用SM2这类的公钥加密算法。

14、使用加密算法

数据库成功加载了外部加密算法后,加密算法就可以和内部内置的算法一样的使用方法,具体参考达梦安全管理手册的存储加密章节。可以用在全库加密、表空间加密、列加密、页校验(page_check)、日志校验(rlog_hash_name)、日志加密(rlog_encrypt_name)等几乎所有的地方,还可以用在应用层通信加密(comm_encrypt_name)。

 

你可能感兴趣的:(数据库,算法,达梦,国密,商密)