Fabric系列 - HSM之2 容器化

Docker Image

预编译的 Hyperledger Fabric Docker 镜像不支持使用 PKCS11。如果你使用 docker 部署 Fabric,你需要重新编译镜像并启用 PKCS11,编译命令如下:

bash 复制代码
#到fabric工程目录下
make docker GO_TAGS=pkcs11

你需要确保 PKCS11 库可用,你可以在节点上安装它,也可以把它挂载到容器里。

配置

配置文件

下边是一个 BCCSP 部分的示例:

yaml 复制代码
#############################################################################
# BCCSP (BlockChain Crypto Service Provider) section is used to select which
# crypto library implementation to use
#############################################################################
bccsp:
  default: PKCS11
  pkcs11:
    Library: /etc/hyperledger/fabric/libsofthsm2.so
    Pin: "71811222"
    Label: fabric
    hash: SHA2
    security: 256
    Immutable: false

环境变量

你也可以使用环境变量覆盖配置文件中相关字段。

fabric-ca-server

如果你使用 Fabric CA Server链接 HSM,你需要设置如下环境变量或者直接在CA服务器配置文件(fabric-ca-server-config.yaml)中设置相应的值

bash 复制代码
SOFTHSM2_CONF=/etc/softhsm2.conf

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
FABRIC_CA_SERVER_BCCSP_PKCS11_HASH=SHA2
FABRIC_CA_SERVER_BCCSP_PKCS11_SECURITY=256

fabric-ca-server 使用环境变量会报错 [FATAL] Initialization failure: Failed to get BCCSP with opts: Could not initialize BCCSP PKCS11: Invalid config. It must not be nil.

fabric-ca-client

如果你使用 Fabric CA Client链接 HSM

bash 复制代码
SOFTHSM2_CONF=/etc/softhsm2.conf

FABRIC_CA_CLIENT_BCCSP_DEFAULT=PKCS11
FABRIC_CA_CLIENT_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
FABRIC_CA_CLIENT_BCCSP_PKCS11_PIN=71811222
FABRIC_CA_CLIENT_BCCSP_PKCS11_LABEL=fabric
peer

如果您使用 Fabric peer 连接到 softhsm2,您可以设置以下环境变量或直接在 peer 配置文件中设置相应的值:

bash 复制代码
SOFTHSM2_CONF=/etc/softhsm2.conf

CORE_PEER_BCCSP_DEFAULT=PKCS11
CORE_PEER_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
CORE_PEER_BCCSP_PKCS11_PIN=71811222
CORE_PEER_BCCSP_PKCS11_LABEL=fabric
CORE_PEER_BCCSP_PKCS11_HASH=SHA2
CORE_PEERENERAL_BCCSP_PKCS11_SECURITY=256
orderer

如果您使用 Fabric orderer 连接到 softhsm2,您可以设置以下环境变量或直接在 orderer 配置文件中设置相应的值:

bash 复制代码
SOFTHSM2_CONF=/etc/softhsm2.conf

ORDERER_GENERAL_BCCSP_DEFAULT=PKCS11
ORDERER_GENERAL_BCCSP_PKCS11_LIBRARY=/etc/hyperledger/fabric/libsofthsm2.so
ORDERER_GENERAL_BCCSP_PKCS11_PIN=71811222
ORDERER_GENERAL_BCCSP_PKCS11_LABEL=fabric
ORDERER_GENERAL_BCCSP_PKCS11_HASH=SHA2
ORDERER_GENERAL_BCCSP_PKCS11_SECURITY=256

Orderer 启动时会打印出的 config values:

bash 复制代码
General.LocalMSPDir = "/var/hyperledger/orderer/msp"
General.LocalMSPID = "OrdererMSP"
General.BCCSP.ProviderName = "PKCS11"
General.BCCSP.SwOpts.SecLevel = 256
General.BCCSP.SwOpts.HashFamily = "SHA2"
General.BCCSP.SwOpts.Ephemeral = true
General.BCCSP.SwOpts.FileKeystore.KeyStorePath = ""
General.BCCSP.SwOpts.DummyKeystore =
General.BCCSP.SwOpts.InmemKeystore =
General.BCCSP.Pkcs11Opts.SecLevel = 256
General.BCCSP.Pkcs11Opts.HashFamily = "SHA2"
General.BCCSP.Pkcs11Opts.Ephemeral = false
General.BCCSP.Pkcs11Opts.Library = "/usr/local/lib/softhsm/libsofthsm2.so"
General.BCCSP.Pkcs11Opts.Label = "fabric"
General.BCCSP.Pkcs11Opts.Pin = "222222"
General.BCCSP.Pkcs11Opts.SoftVerify = false
General.BCCSP.Pkcs11Opts.Immutable = false

docker compose

修改 docker compose 配置文件的 volumes 部分来挂载 softhsm 库和配置文件

yaml 复制代码
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 目录中签名证书的主体密钥标识符(subject key identifier)来检索 HSM 中的私钥。根据你使用 Fabric CA(Certificate Authority)还是你自己的 CA 的情况,创建 MSP 目录的操作是不一样的。

使用带有 HSM 的 Fabric CA

你可以像 Peer 节点或者排序节点一样,通过修改配置文件让 Fabric CA 使用 HSM。因为你可以使用 Fabric CA 在 HSM 内部生成秘钥,所以创建本地 MSP 目录的过程就很简单。按照下边的步骤:

  1. 修改bccspFabric CA 服务器配置文件的部分并指向您为 HSM 创建的LabelPIN。Fabric CA 服务器启动时,生成私钥并存储在 HSM 中。如果您不担心公开您的 CA 签名证书,您可以跳过此步骤,只为您的对等节点或排序节点配置 HSM,如后续步骤所述。

  2. 使用 Fabrci CA 客户端,用你的 CA 来注册 Peer 节点或者排序节点的身份。

  3. 在部署具有 HSM 支持的对等节点或排序节点之前,您需要通过将其私钥存储在 HSM 中来注册节点身份。编辑bccspFabric CA 客户端配置文件的部分或使用关联的环境变量指向对等节点或排序节点的 HSM 配置。在 Fabric CA Client 配置文件中,将默认SW配置替换为PKCS11配置并为您自己的 HSM 提供值

然后,对于每个节点,通过针对您在步骤 2 中注册的节点身份进行注册,使用 Fabric CA 客户端生成对等节点或排序节点的 MSP 文件keystore夹。 enroll 命令使用的不是将私钥存储在关联 MSP的文件夹中节点的 HSM 以生成和存储对等节点或排序节点的私钥。该keystore文件夹保持为空。

  1. 要配置对等节点或排序节点以使用 HSM,类似地更新对等节点或排序节点bccsp配置文件的部分以使用 PKCS11 并提供LabelPIN。此外,编辑mspConfigPath(对于对等节点)或LocalMSPDir(对于排序节点)的值以指向使用 Fabric CA 客户端在上一步中生成的 MSP 文件夹 。现在对等节点或排序节点已配置为使用 HSM,当您启动节点时,它将能够使用受 HSM 保护的私钥对交易进行签名和背书。

在你自己的 CA 上使用 HSM

如果你使用你自己的 CA 来部署 Fabric 组件,你可以按如下步骤使用 HSM:

  1. 配置您的 CA 以使用 PKCS11 与 HSM 通信并创建一个LabelPIN. 然后使用您的 CA 为每个节点生成私钥和签名证书,私钥在 HSM 内部生成。

  2. 使用你的 CA 构建节点 MSP 目录。将第 1 步生成的签名证书放入 signcerts 目录。你也可以让 keystore 目录为空。

  3. 要配置对等节点或排序节点以使用 HSM,类似地更新对等节点或排序节点bccsp配置文件的部分以使用 PKCS11Label并提供和PIN。编辑mspConfigPath(对于对等节点)或LocalMSPDir(对于排序节点)的值以指向使用 Fabric CA 客户端在上一步中生成的 MSP 文件夹。现在对等节点或排序节点已配置为使用 HSM,当您启动该节点时,它将能够使用受 HSM 保护的私钥对交易进行签名和背书。


: 区块链知识系列
: 密码学系列
: 零知识证明系列
: 共识系列
: 公链调研系列
: BTC系列
: 以太坊系列
: EOS系列
: Filecoin系列
: 联盟链系列
: Fabric系列
: 智能合约系列
: Token系列

相关推荐
BaiduPHP2 小时前
docker异常断电,出现docker服务,启动失败
docker·容器·eureka
梦梦代码精4 小时前
多商户商城技术选型实测:ThinkPHP 8与Vue 3结合,B2B2C架构下的开源实践
docker·开源·代码规范
寒冰碧海4 小时前
大模型部署从0到1(三):单机多卡 vLLM 部署Qwen3.6实战|Docker Compose 一键启动
docker·容器·vllm
chexus5 小时前
Docker 镜像瘦身:使用 Maven 拆分 Jar 包
docker·maven·jar
梦梦代码精5 小时前
智能体应用开发平台技术选型:一个自带商业模块的开源方案调研
人工智能·docker·开源
潘正翔16 小时前
docker核心概念
linux·运维·服务器·docker·容器·centos·运维开发
Java小白笔记18 小时前
Docker 安装配置完全指南:MacOS 、Windows、Linux环境下的安装、配置与验证
linux·macos·docker
copyer_xyf1 天前
Docker 入门与实战:容器化 React + NestJS 项目
docker
刘马想放假1 天前
Docker 从入门到进阶:一篇写给工程师的系统化实战指南
运维·docker·容器
Wang's Blog1 天前
Go-Zero进阶实战2: 使用 Docker Compose 编排与部署微服务
docker·微服务·golang