5. 部署启用硬件加密的链
本章节将介绍“长安链·ChainMaker”配置连接硬件加密机的运行过程。
5.1. 启用硬件加密验证的测试网络架构
典型的硬件加密测试网络包含三个组成部分:
使用硬件加密的证书颁发机构(cryptogen)
使用硬件加密的区块链节点(chainmaker)
使用硬件加密的sdk应用端(sdk)
5.2. 配置流程简介
2.3.0版本的chainmaker的硬件加密支持两种标准:pkcs11和sdf(以下配置项统一以pkcs11配置为例,sdf参考配置说明)。
假设cryptogen和chainmaker的4个节点在一台服务器,sdk在另一台服务器,他们连接同一台硬件加密机,构建硬件加密环境的部署流程如图:
5.3. 连接硬件加密机的配置
前置条件:已经存在某厂商(本文示例中使用三未信安)提供的硬件加密机,在其提供的配置服务中,添加好对应的密钥(以SM2密钥为例):
5.3.1. 下载硬件加密相关的配置文件
以三未信安的密码机为例,需要以下文件:
libswsds.so swsds.ini 密码机连接库
libupkcs11.so upkcs11.ini 密码机pkcs11库
5.3.2. 配置硬件加密机所在的ip,端口号以及密码:
vim swsds.ini
[HSM1]
ip=192.168.1.240
port=8000
passwd=xxxxxxxxxxxxxxxxxxxxxxxx
5.3.3. 部署连接环境
将libswsds.so和libupkcs11.so 拷贝到/usr/local/lib64/pkcs11目录下
将swsds.ini和upkcs11.ini 拷贝到/etc/目录下
5.4. 配置生成证书时使用硬件加密
5.4.1. 方式一:使用chainmaker-cryptogen生成证书(支持sdf)
关于chainmaker-cryptogen的使用,参考:通过命令行工具启动链
配置chainmaker-cryptogen/config/crypto_config_template.yml
pk_algo: SM2 ski_hash: SM3 tls_mode: 0 # 0:单证书模式,1:双证书模式(国密tls标准需要双证书) #pkcs11配置 pkcs11: enabled: true type: sdf #type: pkcs11 #support sdf | pkcs11 library: /usr/local/lib64/pkcs11/libswsds.so label: Sansec HSM password: 11111111 session_cache_size: 10 hash: "SHA256" # hash algorithm used to compute SKI
配置说明:
使用非国密示例:
pk_algo: ecc_p256 ski_hash: sha256
使用国密示例:
pk_algo: SM2 ski_hash: SM3
开启硬件加密:
pkcs11: enabled: true
配置不同的硬件加密标准:
type: pkcs11 #国际标准 # 或 type: sdf # 国内标准
配置library
library: /usr/local/lib64/pkcs11/libupkcs11.so #pkcs11 library: /usr/local/lib64/pkcs11/libswsds.so #sdf
配置密码机私钥
三未信安的密码机针对每种密钥有通用的前缀,例如SM2SignKey,RSASignKey,RSAEncKey等,前缀加上管理台的索引就是密钥的id
将密码机中配置的密钥id填写到配置文件chainmaker-cryptogen/config/pkcs11_keys.yml 中:
在2.3.0版本,pkcs11_keys.yml的配置如下:
pkcs11_keys: - wx-org1.chainmaker.org: ca: consensus: - 2,123456 - 3,123456 common: - 3,123456 user: admin: - 4,123456 client: - 5,123456 light: - 6,123456 - wx-org2.chainmaker.org: ca: - 7,123456 node: consensus: - 8,123456 - 9,123456 common: - 9,123456 user: admin: - 10,123456 client: - 11,123456 light: - 12,123456 - wx-org3.chainmaker.org: ca: - 13,123456 node: consensus: - 14,1234561 - 15,1234562 common: - 15,123456 user: admin: - 16,123456 client: - 17,123456 light: - 18,123456 - wx-org4.chainmaker.org: ca: - 19,123456 node: consensus: - 20,123456 - 21,123456 common: - 21,123456 user: admin: - 22,123456 client: - 23,123456 light: - 24,123456
在2.2.0及以前的版本,前辍SM2SignKey被配置在pkcs11_keys.yml文件中, pkcs11_keys.yml的配置如下:
pkcs11_keys: - wx-org1.chainmaker.org: ca: - SM2SignKey1 node: consensus: - SM2SignKey2 common: - SM2SignKey3 user: admin: - SM2SignKey4 client: - SM2SignKey5 light: - SM2SignKey6 - wx-org2.chainmaker.org: ca: - SM2SignKey7 node: consensus: - SM2SignKey8 common: - SM2SignKey9 user: admin: - SM2SignKey10 client: - SM2SignKey11 light: - SM2SignKey12 - wx-org3.chainmaker.org: ca: - SM2SignKey13 node: consensus: - SM2SignKey14 common: - SM2SignKey15 user: admin: - SM2SignKey16 client: - SM2SignKey17 light: - SM2SignKey18 - wx-org4.chainmaker.org: ca: - SM2SignKey19 node: consensus: - SM2SignKey20 common: - SM2SignKey21 user: admin: - SM2SignKey22 client: - SM2SignKey23 light: - SM2SignKey24
5.4.2. 方式二:使用chainmaker-ca生成证书(暂不支持sdf)
关于chainmaker-ca的使用,参考:CA证书服务
配置启用硬件加密
hash_type: SM3 key_type: SM2 # SHA256/SHA3_256/SM3 ###.... ###其他配置项省略 ###.... pkcs11_config: enabled: true library: /usr/local/lib64/pkcs11/libupkcs11.so label: HSM password: 11111111 session_cache_size: 10 hash: "SHA256"
私钥配置(目前用户证书不支持硬件加密,只有CA证书支持硬件加密)
intermediate_config: - csr: CN: ca-wx-org1.chainmaker.org O: wx-org1.chainmaker.org OU: ca country: CN locality: Beijing province: Beijing key_id: SM2SignKey2 - csr: CN: ca-wx-org2.chainmaker.org O: wx-org2.chainmaker.org OU: ca country: CN locality: Beijing province: Beijing key_id: SM2SignKey3 - csr: CN: ca-wx-org3.chainmaker.org O: wx-org3.chainmaker.org OU: ca country: CN locality: Beijing province: Beijing key_id: SM2SignKey14 - csr: CN: ca-wx-org4.chainmaker.org O: wx-org4.chainmaker.org OU: ca country: CN locality: Beijing province: Beijing key_id: SM2SignKey15
5.5. 节点启用硬件加密
5.5.1. 修改节点配置模板文件:
chainmaker-go/config/config_tql/chainmaker.tpl
pkcs11:
enabled: true
type: pkcs11 #支持pkcs11和sdf
library: /usr/local/lib64/libupkcs11.so
label: Sansec HSM
password: 12345678
session_cache_size: 10
hash: ""
5.5.2. 使用命令行方式构建链,并启动4个节点
参考:通过命令行工具启动链
5.6. 应用端(sdk)启用硬件加密:
修改sdk_config.yml:
#pkcs11配置(配置说明参考cryptogen)
pkcs11:
enabled: true
type: pkcs11
library: /usr/local/lib64/libupkcs11.so
label: HSM
password: 12345678
session_cache_size: 10
hash: ""
5.7. 配置环境变量
在2.3.0之后,chainmaker的密码机环境提供了配置环境变量的方式:
配置密码机连接的环境变量(必须)
export LD_LIBRARY_PATH=/usr/local/lib64/pkcs11
加载适配器插件(必选) 下载适配器相关代码:
git clone --depth=1 https://git.chainmaker.org.cn/chainmaker/common.git
构建适配器:
cd common/crypto/hsm/swxa ./build.sh
将生成的sansec_hsm_adapter.so 复制到/usr/local/lib64下
cp sansec_hsm_adapter.so /usr/local/lib64sansec_hsm_adapter.so export HSM_ADAPTER_LIB=/usr/local/lib64/sansec_hsm_adapter.so
配置硬件加密选项(可选)
以下环境变量的配置与配置文件中的功能相同,二选一即可
Pkcs11:
export HSM_LIB=/usr/local/lib64/libupkcs11.so export HSM_SESSION_CACHE_SIZE=10 export HSM_LABEL="Sansec HSM" export HSM_PASSWORD=11111111
5.8. 发送交易
完成以上配置,启动节点和sdk后,可以使用cmc命令以及sdk的方式向链上发送交易