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系列

相关推荐
Patrick_Wilson21 小时前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy1 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭1 天前
运行你的第一个Docker容器
后端·docker·容器
宋均浩2 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵3 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1113 天前
LM Studio Docker 部署——本地大模型一键启动
docker
曲幽4 天前
别再用网页翻译看源码了!你的私人翻译神器LibreTranslate,部署避坑指南来了
python·docker·web·pot·translate·libretranslate·arogstranslate
武子康6 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
Alsn869 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
2601_961875249 天前
决战申论100题2026|最新|范文
linux·容器·centos·debian·ssh·fabric·vagrant