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

相关推荐
难搞哦~2 小时前
绿联NAS一键部署SQMusic免费下载无损音质(FLAC/APE)+高码率MP3(320kbps)音乐,搭建个人高品质音乐库
docker·nas·绿联nas·sqmusic
全栈攻略2 小时前
老版本Docker Desktop for Mac 历史版本下载大全(macOS 10.15/11/12)
macos·docker·容器
kobe_OKOK_2 小时前
docker run 一系列中间件命令
运维·docker·容器
Java小白,一起学习2 小时前
Docker快速入门(ubuntu环境下)
ubuntu·docker·容器
江湖有缘2 小时前
Docker好搭档:轻量级端口检查工具Dockpeek上手体验
docker·容器·eureka
独隅13 小时前
PyTorch 模型部署的 Docker 配置与性能调优深入指南
人工智能·pytorch·docker
yuzhuanhei16 小时前
docker常用命令
运维·docker·容器
我叫张小白。16 小时前
Dify系列(一):平台安装部署+界面操作
docker·ai·语言模型·大模型·dify·智能体