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的库文件是有效的,挂载到容器内部或者通过节点安装后是可以使用的。

示例

接下来的示例说明了如何去配置一个可以使用HSMFabirc节点。

首先,需要安装一个实现了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文件通过volumessofthsm库文件和配置文件挂载到容器中。例如,可以添加下面的环境和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文件夹:

  1. 创建一个HSM令牌并将它指向Fabirc CA的配置文件。当Fabric CA服务启动时,将会在HSM中生成CA签名证书。如果不担心CA签名证书是否暴露,可以跳过该步骤。
  2. 使用Fabric CA客户端通过自己的CA去注册peer或者order节点身份。
  3. 编辑Fabric CA客户端配置文件或者是环境变量使用HSM作为加密服务提供者并再次登录获取节点的身份。登录命令将通过HSM生成私钥文件.
  4. 更新关于peer或者orderer节点的配置文件中的BCCSP部分使用PKCS11,并将令牌作为加密服务提供者。指向由Fabric CA客户端创建的MSP文件夹。一旦部署完成,peer节点或者orderer节点将可以通过由HSM提供保护的私钥文件签名和背书交易。

通过自己的CA使用HSM

如果使用自己的CA证书中心来部署Fabric组件,可以通过以下几步使用HSM:

  1. 配置自己的CA使用PKCS11创建令牌与HSM进行通信。然后使用自己的CA去为每一个节点生成私钥和签名证书。私钥由HSM内部进行生成。
  2. 使用CA去构建节点的MSP文件夹。将步骤一中生成的签名证书放入signcerts文件夹内。可以保持keystore文件夹为空。
  3. 更新关于peer或者orderer节点的配置文件中的BCCSP部分使用PKCS11,并将令牌作为加密服务提供者。指向由Fabric CA客户端创建的MSP文件夹。一旦部署完成,peer节点或者orderer节点将可以通过由HSM提供保护的私钥文件签名和背书交易。
posted @ 2019-12-24 10:44  触不可及`  阅读(2725)  评论(0编辑  收藏  举报