Hyperledger Fabric使用硬件安全模块(HSM)
使用硬件安全模型
官方文档
可以通过Fabric
节点使用硬件安全模块(HSM)
来产生和存储私钥。HSM
用于保护私钥和处理加密操作。允许peer
节点与orderer
节点在不暴露他们的私钥的条件下去签名和背书交易,当前Fabric
只支持使用PKCS11
标准与HSM
进行通信。
配置HSM
为了在Fabric
节点上使用HSM
,需要更新关于节点配置文件如core.yaml
中的BCCSP
(加密服务提供者)部分.在BCCSP
部分,需要选择PKCS11
作为提供者并提供需要使用的PKCS11
库的路径。还需要提供为加密操作创建的令牌的标签和密码。可以使用令牌去生成和存储多个秘钥。
预先构建的Hyperledger Fabric Docker
镜像不能够使用PKCS11
。如果使用Docker
部署Fabric
,需要通过以下的命令启动PKCS11
构建自己的镜像。
make docker GO_TAGS=pkcs11
同时也需要确保PKCS11
的库文件是有效的,挂载到容器内部或者通过节点安装后是可以使用的。
示例
接下来的示例说明了如何去配置一个可以使用HSM
的Fabirc
节点。
首先,需要安装一个实现了PKCS11
的接口。本例使用开源的softhsm实现。在下载和配置完成softhsm
后,需要设置环境变量SOFTHSM2_CONF
指向softhsm2
配置文件。
可以使用softhsm
去创建用于处理关于Fabric
节点在HSM
插槽中用于加密操作令牌。在这个示例中,我们创建了一个标签为fabric
,密码为71811222
的令牌。在创建令牌完成之后,更新配置文件来使用PKCS11
,并将令牌作为加密服务提供者。可以在下面发现关于BCCSP
部分配置的例子:
#############################################################################
# BCCSP (区块链加密服务提供者) 部分,用于选择使用的已实现的加密库文件
#############################################################################
bccsp:
default: PKCS11
pkcs11:
Library: /etc/hyperledger/fabric/libsofthsm2.so
Pin: 71811222
Label: fabric
hash: SHA2
security: 256
也可以通过环境变量来覆盖配置文件中相关的字段。如果通过Fabric CA
服务器连接到了HSM
,则需要设置以下环境变量:
FABRIC_CA_SERVER_BCCSP_DEFAULT=PKCS11
FABRIC_CA_SERVER_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
FABRIC_CA_SERVER_BCCSP_PKCS11_PIN=71811222
FABRIC_CA_SERVER_BCCSP_PKCS11_LABEL=fabric
如果使用docker compose
部署了节点,在构建完自己的镜像后,可以更新docker compose
文件通过volumes
将softhsm
库文件和配置文件挂载到容器中。例如,可以添加下面的环境和volumes
变量到docker compose
文件:
environment:
- SOFTHSM2_CONF=/etc/hyperledger/fabric/config.file
volumes:
- /home/softhsm/config.file:/etc/hyperledger/fabric/config.file
- /usr/local/Cellar/softhsm/2.1.0/lib/softhsm/libsofthsm2.so:/etc/hyperledger/fabric/libsofthsm2.so
配置使用HSM
的网络
如果使用HSM
部署了Fabric
节点,私钥将会在HSM
内部生成而不是节点本地的MSP
中的keystore
文件夹内。MSP
中的keystore
文件夹将为空文件夹。另外,Fabric
节点将使用关于signcerts
文件夹内的签名证书的主题秘钥标识符去接收HSM
中的私钥。这个创建MSP
文件夹的过程将和之前不同,取决于自己使用的Fabric
证书认证中心。
使用Fabric CA
可以通过编辑相同的配置文件配置Fabric CA
使peer
节点或者是orderer
节点使用HSM
。因为可以使用Fabric CA
内部的HSM
来生成秘钥。通过下面的步骤将直接创建本地的MSP
文件夹:
- 创建一个
HSM
令牌并将它指向Fabirc CA
的配置文件。当Fabric CA
服务启动时,将会在HSM
中生成CA
签名证书。如果不担心CA
签名证书是否暴露,可以跳过该步骤。 - 使用
Fabric CA
客户端通过自己的CA
去注册peer
或者order
节点身份。 - 编辑
Fabric CA
客户端配置文件或者是环境变量使用HSM
作为加密服务提供者并再次登录获取节点的身份。登录命令将通过HSM
生成私钥文件. - 更新关于
peer
或者orderer
节点的配置文件中的BCCSP
部分使用PKCS11
,并将令牌作为加密服务提供者。指向由Fabric CA
客户端创建的MSP
文件夹。一旦部署完成,peer
节点或者orderer
节点将可以通过由HSM
提供保护的私钥文件签名和背书交易。
通过自己的CA
使用HSM
如果使用自己的CA
证书中心来部署Fabric
组件,可以通过以下几步使用HSM
:
- 配置自己的
CA
使用PKCS11
创建令牌与HSM
进行通信。然后使用自己的CA
去为每一个节点生成私钥和签名证书。私钥由HSM
内部进行生成。 - 使用
CA
去构建节点的MSP
文件夹。将步骤一中生成的签名证书放入signcerts
文件夹内。可以保持keystore
文件夹为空。 - 更新关于
peer
或者orderer
节点的配置文件中的BCCSP
部分使用PKCS11
,并将令牌作为加密服务提供者。指向由Fabric CA
客户端创建的MSP
文件夹。一旦部署完成,peer
节点或者orderer
节点将可以通过由HSM
提供保护的私钥文件签名和背书交易。