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 创建的Label和PIN。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 并提供Label和PIN。此外,编辑mspConfigPath(对于对等节点)或LocalMSPDir(对于排序节点)的值以指向使用 Fabric CA 客户端在上一步中生成的 MSP 文件夹 。现在对等节点或排序节点已配置为使用 HSM,当您启动节点时,它将能够使用受 HSM 保护的私钥对交易进行签名和背书。

在你自己的 CA 上使用 HSM

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

  1. 配置您的 CA 以使用 PKCS11 与 HSM 通信并创建一个Label和PIN. 然后使用您的 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系列

相关推荐
JeJe同学6 小时前
Docker镜像导入、容器启动
linux·运维·docker
元Y亨H11 小时前
基于 Jenkins + Docker 的前端(Vben Admin)CI/CD 踩坑
docker·jenkins
白兰地空瓶12 小时前
项目要上线了,我连夜学完 Docker:从底层原理到容器化部署全记录
docker·全栈
Knight_AL14 小时前
PostgreSQL Docker 数据库备份:pg_dump 与 SQL 格式备份的区别
数据库·docker·postgresql
灯澜忆梦15 小时前
【docker】#1 | Docker 初识
运维·docker·容器
骑着蜗牛撵大象32716 小时前
穿越 Docker 内核迷雾:镜像分层的叠加态与卷挂载的空间穿梭
运维·docker·容器·联合文件系统·卷挂载·镜像分层·存储驱动
goehou16 小时前
AI 应用上线实战:从本地脚本到 Docker 容器化(密钥、健康检查、镜像瘦身)
docker·ai·llm·部署·教程·容器化
吴声子夜歌16 小时前
Docker入门与实战——Docker数据管理
docker·容器
程序员老赵17 小时前
Docker 部署 TeslaMate:轻松搭建特斯拉车辆数据记录平台
docker·容器·开源
java_logo17 小时前
Docker 部署 Emby:轻松搭建家庭影音媒体服务器
服务器·docker·nas·emby·飞牛nas·群晖nas·轩辕镜像