Tejido Hyperledger
Requisitos previos
- El SO en el que se vaya a realizar la integración mediante PKCS#11 debe ser compatible con las librerías HSM.
- Como Fabric utiliza por defecto Alpine Linux, es necesario cambiar el dockerfile para utilizar un sistema operativo compatible.
Versiones
-
Este procedimiento se realizó con la versión de Hyperledger Fabric que se indica a continuación, en WSL 2 de Windows 11
Componente Versión fabric-ca (servidor/cliente) 1.5.5 tela-herramienta 2.4.7 tela-par 2.4.7 ordenador de tejidos 2.4.7 Base S.O. Ubuntu 20.04 sobre WSL2 en Windows 11 Contenedores S.O. Ubuntu 22.04 (jammy) Vaya a 1.20 Cliente HSM 4.7.35 Firmware HSM 5.0.28.0-243-g5a9cb01
Configuración inicial sin PKCS#11
-
Siga el procedimiento descrito en Fabric test network. En la Guía de inicio sólo configure los siguientes temas:
-
Inicie una red de prueba desde cero cada vez que la ejecute. Si el entorno no está limpio, se producirán errores en varios puntos del ascenso de la red de prueba.
-
Supervisar los registros y salidas del red de pruebas. Los registros del HSM se puede ver aquí, cuando se vincula con el
stdout
:HSM_LOG_DIR=stdout
Integración con HSM mediante PKCS#11
-
En los siguientes ejemplos de integración, se utilizan usuarios/particiones HSM independientes para cada componente/organización.
Componente Nombre de usuario Observaciones Dónde se utiliza Prueba de integración fabric-ca-client
cacliente Utilizado en la prueba de integración de fabric-ca-client
.host Tela-ca ca1 Organización CA 1 contenedor Tela-ca ca2 Organización CA 2 contenedor Tela-ca caorderer CA del ordenante contenedor Par 1 par1 Par de la organización 1 contenedor Par 2 par2 Par de la organización 2 contenedor
Configuración inicial
-
Debe seguir los pasos de la sección Configuración inicial sin PKCS#11 antes de continuar.
Funcionando en un Ubuntu 20.04 sobre Windows 11 WSL2.
-
Establecer la variable de entorno
GOPATH
con el directorio de trabajo, en este caso usaremos~/go
. Puede definir en el~/.profile
para facilitar su uso.export GOPATH=$HOME/go
Recompilar las herramientas fabric y fabric-ca con soporte PKCS#11
-
Crear carpetas Hyperledger y clonar el repositorio Hyperledger
tela-ca
.cd $GOPATH mkdir -p src/github.com/hyperledger/ cd src/github.com/hyperledger git clone -b v1.5.5 https://github.com/hyperledger/fabric-ca cd fabric-ca/
-
Compilar el
tela-ca
efabric-ca-client
con soporte PKCS#11.make fabric-ca-server GO_TAGS=pkcs11 make fabric-ca-client GO_TAGS=pkcs11
Los binarios se generan en
fabric-ca/bin
. -
Copiar los binarios
tela-ca
efabric-ca-client
a lamuestras-tejido/bin
. -
Clon
fabricación
.cd $GOPATH/src/github.com/hyperledger git clone -b v2.4.7 https://github.com/hyperledger/fabric.git cd fabric
-
Compilar el
herramientas
con soporte PKCS#11.make tools GO_TAGS=pkcs11
Los binarios se generan en
construir/bin
. -
Copie los binarios generados en el directorio
muestras-tejido/bin
.
Integración con fabric-ca-client
- Hay una prueba fabric-ca-client en el archivo
./fabric-samples/hardware-security-module
. - El expediente,
./fabric-samples/hardware-security-module/README.md
puede servir de guía, pero debe adaptarse.
Esta prueba se puede ejecutar desde la propia máquina, sin necesidad de un contenedor. En este caso, se ejecutó en un Ubuntu 20.04 sobre Windows 11 WSL2.
-
Para la prueba tenemos que cambiar los códigos duros.
./fabric-samples/hardware-security-module/ca-client-config/fabric-ca-client-config-template.yaml
En el
bccsp
cambie los siguientes campos: -Etiqueta
Etiqueta del token P11. Dinamo En el caso de que sea "Dinamo HSM". -Pin
Contraseña utilizada para iniciar sesión en P11. Dinamo Contraseña del usuario configurado en P11 .No modifique el campo
Biblioteca
. El marcador de posición es sobrescrito por el script de ejecución.############################################################################# # BCCSP (BlockChain Crypto Service Provider) section allows to select which # crypto implementation library to use ############################################################################# bccsp: default: PKCS11 PKCS11: Library: REPLACE_ME_HSMLIB Pin: 12345678 Label: "Dinamo HSM" hash: SHA2 security: 256
-
Cambiar la IP y el usuario de HSM en el siguiente script. Este script generará el archivo de configuración del tejido que se utilizará para hacer el
fabric-ca-client
para generar un nuevo usuario.#!/bin/bash # # Test PKCS#11 CA client # # Add the path to the fabric-ca-client with pkcs11 support export PATH=./fabric-samples/bin:$PATH export PKCS11_LIB=/usr/lib/libtacndp11.so # path to the installed pkcs11 # Dinamo pkcs11 configuration export DFENCE_PKCS11_IP=127.0.0.1 # HSM IP Address export DFENCE_PKCS11_USER=caclient # HSM User export DFENCE_PKCS11_AUTO_RECONNECT=1 #export HSM_LOG_DIR=./ #export HSM_LOG_LEVEL=3 ./fabric-samples/hardware-security-module/scripts/generate-hsm-user.sh HSMUser
-
Para ejecutar la prueba, realice los cambios y ejecute el script anterior.
Compruebe que el usuario configurado en
test-p11-ca-client.sh
existe en HSM../start-fabric.sh ./test-p11-ca-client.sh ./stop-fabric.sh
Muestra de resultados
./test-p11-ca-client.sh 2022/11/24 19:06:08 [INFO] TLS Enabled 2022/11/24 19:06:08 [INFO] generating key: &{A:ecdsa S:256} 2022-11-24 19:06:08.860 -03 [bccsp_p11] generateECKey -> INFO 001 Generated new P11 key, SKI 80feb3f43df12ef5dae75a3dd3502092d702a8dd80e8fcb92335c41f54e372d0 2022/11/24 19:06:08 [INFO] encoded CSR . . .
Integración con fabric-ca-server
-
Versiones utilizadas:
Componente Versión S.O. Ubuntu 22.04 (jammy) Vaya a 1.20 Cliente HSM 3.7.35-1 -
Para que Hyperledger funcione con HSM necesitamos recompilar el contenedor con la siguiente configuración:
- Utiliza una distribución Linux que soporte el cliente HSM, en este ejemplo utilizaremos Ubuntu;
- Activar la compatibilidad con PKCS#11.
Generar imagen compatible con PKCS#11
-
Cambiar el
Dockerfile
para compilar ejecutar con Ubuntu e instalar el HSM. El archivoDockerfile
se encuentra en el$GOPATH/src/github.com/hyperledger/fabric-ca/images/fabric-ca
. Tras los cambios, el archivo debería tener este aspecto.# # Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 # ARG GO_VER FROM ubuntu:jammy ARG GO_LDFLAGS ARG GO_TAGS # Latest debian url of DINAMO client ENV HSM_CLIENT_URL "https://downloads.dinamonetworks.io/bin/client/linux/x64/4.7.35/dinamo-4.7.35-1.x64.deb" ENV GO_URL "https://storage.googleapis.com/golang/go1.19.3.linux-amd64.tar.gz" ENV DEBIAN_FRONTEND noninteractive RUN apt-get update -y && \ apt-get install -y \ apt-utils \ gcc \ binutils-gold \ git \ curl; RUN curl -L $GO_URL | tar -v -C /usr/local -xz ENV GOPATH /go RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" ENV PATH $GOPATH/bin:/usr/local/go/bin:$PATH WORKDIR /tmp RUN curl -L $HSM_CLIENT_URL -o ./dinamo.deb RUN apt-get install -y ./dinamo.deb RUN rm ./dinamo.deb ADD . /build/fabric-ca WORKDIR /build/fabric-ca RUN go install -tags "${GO_TAGS}" -ldflags "${GO_LDFLAGS}" \ github.com/hyperledger/fabric-ca/cmd/fabric-ca-server \ && go install -tags "${GO_TAGS}" -ldflags "${GO_LDFLAGS}" \ github.com/hyperledger/fabric-ca/cmd/fabric-ca-client RUN apt-get install -y \ tzdata; ENV FABRIC_CA_HOME /etc/hyperledger/fabric-ca-server EXPOSE 7054 CMD fabric-ca-server start -b admin:adminpw
-
Compilar el
tela-ca
.cd $GOPATH/src/github.com/hyperledger/fabric-ca export DOCKER_BUILDKIT=0 export COMPOSE_DOCKER_CLI_BUILD=0 make clean-all make docker GO_TAGS=pkcs11
Configuración de la red de prueba
-
Cambiar los archivos de configuración
fabric-ca-server-config.yaml
de cada organización a utilizar PKCS#11 del HSM. Estos archivos se encuentran en las rutas que se indican a continuación:fabric-samples/test-network/organisations/fabric-ca/org1/fabric-ca-server-config.yaml
.fabric-samples/test-network/organisations/fabric-ca/org2/fabric-ca-server-config.yaml
.
Estos ajustes también pueden definirse mediante variables de entorno, como se muestra en la documentación de Fabric HSM. -
Cambiar la sección
bccsp
para los siguientes valores.bccsp: default: PKCS11 PKCS11: Library: /usr/lib/libtacndp11.so Pin: 12345678 # Senha do usuário do HSM Label: "Dinamo HSM" hash: SHA2 security: 256 Immutable: false
-
Configure las variables de entorno del HSM en el archivo de composición del
componer-ca.yaml
. Este archivo se encuentra enfabric-samples/test-network/compose/compose-ca.yaml
.En este caso, estamos configurando la CA de organización 1En este caso, puede añadir las variables de entorno en su sección correspondiente, como se indica a continuación.
Utilice un usuario HSM diferente para cada una de las CA.
services: ca_org1: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal # IP do HSM - DFENCE_PKCS11_USER=ca1 # Usuário do HSM - DFENCE_PKCS11_AUTO_RECONNECT=1 ... ca_org2: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal # IP do HSM - DFENCE_PKCS11_USER=ca2 # Usuário do HSM - DFENCE_PKCS11_AUTO_RECONNECT=1
Vaya a la red de prueba y ejecute una prueba
-
Ejecute el script de prueba.
-
Ejemplo de resultado de la prueba de transferencia básica
./test-basic-transfer.sh 2022-11-14 18:32:53.487 -03 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 2022-11-14 18:32:56.826 -03 0001 INFO [chaincodeCmd] chaincodeInvokeOrQuery -> Chaincode invoke successful. result: status:200 payload:"Michel" {"AppraisedValue":800,"Color":"white","ID":"asset6","Owner":"Michel","Size":15}
-
Compruebe el registro remoto de HSM que el usuario haya configurado (por ejemplo
ca1
) se ha utilizado correctamente.2022/11/14 21:28:05 00000062 000000B7 995E9769 ca1/1d571851df3d6f v-attr update|172.17.0.1 172.17.0.2:4433 ca1 2022/11/14 21:28:05 00000062 000000B8 995E9769 MANAGE_P11 (03:ca1/1d571851df3d6f) [00000000], c: 23|172.17.0.1 172.17.0.2:4433 ca1 2022/11/14 21:28:05 00000062 000000B9 995E9769 172.17.0.1#23 probe|172.17.0.1 172.17.0.2:4433 ca1 2022/11/14 21:28:05 00000062 000000BA 995E9769 ecc 1d571851df3d6f!0nMFd8VvAX80FxUQ7L+1Sh6eRZ6SSEJSJLuq6BasfL8=, c: 23|172.17.0.1 172.17.0.2:4433 ca1
-
Compruebe que se han creado las claves en el usuario de prueba.
Dinamo - Remote Management Console v. 4.7.34.0 2018 (c) Dinamo Networks HSM 127.0.0.1 e - Engine 5.0.28.0-243-g5a9cb01 (DXP) - TCA0000000 - ID ca1 Keys/Objects - List Name Type T E Label ================================================================================ 1d571851df3d6f prime256v1 n n e60bde44a80e532e20e5ac0952a093a4659e2736bca5b729a5708e6fbdfb8aee a8d9d38535ec9a prime256v1 pub n y ea1f764edd0e8187409d61dfd78313d706b1b146fecb8a99b5f69309aced5de8 d6f690620dee1a prime256v1 n n ea1f764edd0e8187409d61dfd78313d706b1b146fecb8a99b5f69309aced5de8 d7ac2114025001 prime256v1 pub n y e60bde44a80e532e20e5ac0952a093a4659e2736bca5b729a5708e6fbdfb8aee Total of objects: 4
Integración con ordenantes, pares y herramientas (contenedor)
- El contenedor de herramientas es un contenedor que tiene las herramientas básicas para interactuar con el HSM compiladas y ejecutadas en el propio contenedor. Algunas partes de los scripts de la red de pruebas intercalan llamadas a herramientas compiladas localmente (en la máquina local) y ejecuciones de estas herramientas desde el contenedor.
Generar imágenes compatibles con PKCS#11
Los siguientes archivos Docker están en ruta
$GOPATH/src/github.com/hyperledger/fabric/images/
.
-
Editar los archivos
Dockerfile
de peer y el ordenante para ser compilado con Ubuntu y con soporte PKCS#11.# Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 ARG GO_VER ARG ALPINE_VER FROM ubuntu:jammy as peer-base # Latest debian url of DINAMO client ENV HSM_CLIENT_URL "https://downloads.dinamonetworks.io/bin/client/linux/x64/4.7.35/dinamo-4.7.35-1.x64.deb" ENV DEBIAN_FRONTEND noninteractive RUN apt-get update -y && \ apt-get install -y tzdata # Bugfix https://github.com/hyperledger/fabric/issues/3779 RUN if [[ ! -e /etc/nsswitch.conf ]] ; then echo 'hosts: files dns' > /etc/nsswitch.conf ; fi RUN apt-get install -y \ bash \ binutils-gold \ gcc \ git \ make \ musl-dev \ curl RUN curl -L $HSM_CLIENT_URL -o /tmp/dinamo.deb RUN apt-get install -y /tmp/dinamo.deb RUN rm /tmp/dinamo.deb FROM golang:latest as golang ADD . $GOPATH/src/github.com/hyperledger/fabric WORKDIR $GOPATH/src/github.com/hyperledger/fabric FROM golang as peer ARG GO_TAGS #Bugfix https://github.com/hyperledger/fabric/issues/3645 RUN make peer GO_TAGS=${GO_TAGS} RUN make ccaasbuilder RUN \ export MARCH=$(go env GOOS)-$(go env GOARCH) && \ mkdir -p release/linux-platform && \ cp -r release/${MARCH}/builders release/linux-platform/. FROM peer-base ENV FABRIC_CFG_PATH /etc/hyperledger/fabric VOLUME /etc/hyperledger/fabric VOLUME /var/hyperledger COPY --from=peer /go/src/github.com/hyperledger/fabric/build/bin /usr/local/bin COPY --from=peer /go/src/github.com/hyperledger/fabric/sampleconfig/msp ${FABRIC_CFG_PATH}/msp COPY --from=peer /go/src/github.com/hyperledger/fabric/sampleconfig/core.yaml ${FABRIC_CFG_PATH}/core.yaml COPY --from=peer /go/src/github.com/hyperledger/fabric/release/linux-platform/builders/ccaas/bin/ /opt/hyperledger/ccaas_builder/bin/ EXPOSE 7051 CMD ["peer","node","start"]
# Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 ARG GO_VER ARG ALPINE_VER FROM ubuntu:jammy as base # Latest debian url of DINAMO client ENV HSM_CLIENT_URL "https://downloads.dinamonetworks.io/bin/client/linux/x64/4.7.35/dinamo-4.7.35-1.x64.deb" ENV GO_URL "https://storage.googleapis.com/golang/go1.19.3.linux-amd64.tar.gz" ENV DEBIAN_FRONTEND noninteractive RUN apt-get update -y && \ apt-get install -y tzdata # Bugfix https://github.com/hyperledger/fabric/issues/3779 RUN if [[ ! -e /etc/nsswitch.conf ]] ; then echo 'hosts: files dns' > /etc/nsswitch.conf ; fi RUN apt-get install -y \ bash \ binutils-gold \ gcc \ git \ make \ musl-dev \ curl RUN curl -L $HSM_CLIENT_URL -o /tmp/dinamo.deb RUN apt-get install -y /tmp/dinamo.deb RUN rm /tmp/dinamo.deb FROM golang:latest as golang ADD . $GOPATH/src/github.com/hyperledger/fabric WORKDIR $GOPATH/src/github.com/hyperledger/fabric FROM golang as orderer ARG GO_TAGS #Bugfix https://github.com/hyperledger/fabric/issues/3645 RUN make orderer GO_TAGS=${GO_TAGS} FROM base ENV FABRIC_CFG_PATH /etc/hyperledger/fabric VOLUME /etc/hyperledger/fabric VOLUME /var/hyperledger COPY --from=orderer /go/src/github.com/hyperledger/fabric/build/bin /usr/local/bin COPY --from=orderer /go/src/github.com/hyperledger/fabric/sampleconfig/msp ${FABRIC_CFG_PATH}/msp COPY --from=orderer /go/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml ${FABRIC_CFG_PATH} COPY --from=orderer /go/src/github.com/hyperledger/fabric/sampleconfig/configtx.yaml ${FABRIC_CFG_PATH} EXPOSE 7050 CMD ["orderer"]
-
Configure el Dockerfile desde herramientas para utilizar el cliente HSM.
# Copyright IBM Corp. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 ARG GO_VER ARG ALPINE_VER FROM golang:latest as tools ARG GO_TAGS ADD . $GOPATH/src/github.com/hyperledger/fabric WORKDIR $GOPATH/src/github.com/hyperledger/fabric #Bugfix https://github.com/hyperledger/fabric/issues/3645 RUN make tools GO_TAGS=${GO_TAGS} FROM ubuntu:jammy # Latest debian url of DINAMO client ENV HSM_CLIENT_URL "https://downloads.dinamonetworks.io/bin/client/linux/x64/4.7.35/dinamo-4.7.35-1.x64.deb" ENV DEBIAN_FRONTEND noninteractive # git is required to support `go list -m` RUN apt-get update -y && \ apt-get install -y \ bash \ binutils-gold \ gcc \ git \ make \ jq \ tzdata \ curl \ musl-dev; RUN curl -L $HSM_CLIENT_URL -o /tmp/dinamo.deb RUN apt-get install -y /tmp/dinamo.deb RUN rm /tmp/dinamo.deb ENV FABRIC_CFG_PATH /etc/hyperledger/fabric VOLUME /etc/hyperledger/fabric COPY --from=tools /go/src/github.com/hyperledger/fabric/build/bin /usr/local/bin COPY --from=tools /go/src/github.com/hyperledger/fabric/sampleconfig ${FABRIC_CFG_PATH}
-
Compilar el compañero, ordenante e herramientas.
cd $GOPATH/src/github.com/hyperledger/fabric/ make clean-all make docker GO_TAGS=pkcs11
Configuración de la red de prueba
-
Crear los archivos de configuración
fabric-ca-client-config.yaml
de compañeros.Utilice el archivo de configuración generado en
fabric-samples/test-network/organisations/peerOrganisations/org1.example.com/fabric-ca-client-config.yaml
efabric-samples/test-network/organisations/peerOrganisations/org2.example.com/fabric-ca-client-config.yaml
.Estos archivos son temporales y se generan con cada ejecución. Se eliminan cuando se detiene el test-network. Se pueden generar al iniciar el test-network (incluso con errores). Para acelerar el proceso de generación, puede parar con CTRL-C justo después de las identidades del
Peer2
o en cuanto empiece a generar identidades de Ordenante../start-fabric.sh /mnt/d/tmp/hyperledger/fabric-samples/test-network /mnt/d/tmp/hyperledger Using docker and docker-compose Creating channel 'mychannel'. ... Creating Orderer Org Identities Enrolling the CA admin + fabric-ca-client enroll -u https://admin:adminpw@localhost:9054 --caname ca-orderer --tls.certfiles /mnt/d/tmp/hyperledger/fabric-samples/test-network/organizations/fabric-ca/ordererOrg/tls-cert.pem >>> CTRL-C <<<
-
Cree una carpeta para cada organización con los nombres de
org1
eorg2
en eltejido-muestras/test-red
y haga una copia delfabric-ca-client-config.yaml
a la carpeta de la organización correspondiente.cd fabric-samples/test-network mkdir org1 cp organizations/peerOrganizations/org1.example.com/fabric-ca-client-config.yaml org1 mkdir org2 cp organizations/peerOrganizations/org2.example.com/fabric-ca-client-config.yaml org2 cd ../.. ./stop-fabric.sh
Recuerde detener el servicio con
./stop-fabric.sh
después de copiar los archivos, para finalizar correctamente la red de prueba. -
Cambiar la sección
bccsp
con la configuración PKCS#11, del archivofabric-ca-client-config.yaml
de cada organización, como se indica a continuación.bccsp: default: PKCS11 PKCS11: Library: /usr/lib/libtacndp11.so Pin: 12345678 Label: "Dinamo HSM" hash: SHA2 security: 256 Immutable: false
-
Cambiar la llave
bccsp
de la ordenante.bccsp: default: PKCS11 PKCS11: Library: /usr/lib/libtacndp11.so Pin: 12345678 Label: "Dinamo HSM" hash: SHA2 security: 256 Immutable: false
-
Configure las variables de entorno del HSM en el componer de la
componer-ca.yaml
.Este archivo se encuentra en ruta
fabric-samples/test-network/compose/compose-ca.yaml
.En este caso estamos configurando el ordenantepara incluir las variables en su sección correspondiente, como se indica a continuación.
Utilizar un usuario HSM diferente para cada ordenante.
services: ca_orderer: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal # IP do HSM - DFENCE_PKCS11_USER=caorderer # Usuário do HSM - DFENCE_PKCS11_AUTO_RECONNECT=1
-
Añade la configuración de cliente de HSM para la compañerosen el archivo
fabric-samples/test-network/compose/docker/docker-compose-test-net.yaml
.Añada las variables de entorno de configuración para HSM para cada peer,
peer0.org1.ejemplo.com
epeer0.org2.ejemplo.com
como en el ejemplo siguiente.services: peer0.org1.example.com: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal - DFENCE_PKCS11_USER=peer1 - DFENCE_PKCS11_AUTO_RECONNECT=1 ... peer0.org2.example.com: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal - DFENCE_PKCS11_USER=peer2 - DFENCE_PKCS11_AUTO_RECONNECT=1
-
Configure PKCS#11 en el archivo
fabric-samples/test-network/compose/compose-test-net.yaml
. Como en el ejemplo siguiente.services: peer0.org1.example.com: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal - DFENCE_PKCS11_USER=peer1 - DFENCE_PKCS11_AUTO_RECONNECT=1 ... peer0.org2.example.com: ... environment: ... - DFENCE_PKCS11_IP=host.docker.internal - DFENCE_PKCS11_USER=peer2 - DFENCE_PKCS11_AUTO_RECONNECT=1
-
Añada la configuración del cliente y active PKCS#11 en el archivo
fabric-samples/test-network/network.sh
.En el papel
createOrgs
incluir los ajustes antes de cada llamada acrearOrg1
ecrearOrg2
como sigue.. . . infoln "Creating Org1 Identities" export DFENCE_PKCS11_IP=127.0.0.1 export DFENCE_PKCS11_USER=peer1 export DFENCE_PKCS11_AUTO_RECONNECT=1 export HSM_LOG_DIR=/mnt/d/tmp/hyperledger export HSM_LOG_LEVEL=3 export FABRIC_CA_CLIENT_BCCSP_DEFAULT=PKCS11 export FABRIC_CA_CLIENT_BCCSP_PKCS11_LIBRARY=/usr/lib/libtacndp11.so export FABRIC_CA_CLIENT_BCCSP_PKCS11_PIN=12345678 export FABRIC_CA_CLIENT_BCCSP_PKCS11_LABEL="Dinamo HSM" export FABRIC_CA_CLIENT_BCCSP_PKCS11_IMMUTABLE=false export FABRIC_CA_CLIENT_BCCSP_PKCS11_HASH=SHA2 export FABRIC_CA_CLIENT_BCCSP_PKCS11_SECURITY=256 createOrg1 infoln "Creating Org2 Identities" export DFENCE_PKCS11_USER=peer2 createOrg2 unset DFENCE_PKCS11_IP unset DFENCE_PKCS11_USER unset DFENCE_PKCS11_AUTO_RECONNECT unset HSM_LOG_DIR unset HSM_LOG_LEVEL unset FABRIC_CA_CLIENT_BCCSP_DEFAULT unset FABRIC_CA_CLIENT_BCCSP_PKCS11_LIBRARY unset FABRIC_CA_CLIENT_BCCSP_PKCS11_PIN unset FABRIC_CA_CLIENT_BCCSP_PKCS11_LABEL unset FABRIC_CA_CLIENT_BCCSP_PKCS11_IMMUTABLE unset FABRIC_CA_CLIENT_BCCSP_PKCS11_HASH unset FABRIC_CA_CLIENT_BCCSP_PKCS11_SECURITY . . .
-
Cree una carpeta para cada organización con los nombres de
org1
eorg2
en elfabric-samples/config
y haga una copia delcore.yaml
a la carpeta de la organización correspondiente.1. Configure las opciones PKCS#11 cambiando la seccióncd fabric-samples/config mkdir org1 cp ../test-network/compose/docker/peercfg/core.yaml org1 mkdir org2 cp ../test-network/compose/docker/peercfg/core.yaml org2 cd ../..
bccsp
en los siguientes archivos:fabric-samples/test-network/compose/docker/peercfg/core.yaml
fabric-samples/config/org1/core.yaml
fabric-samples/config/org2/core.yaml
. . . bccsp: default: PKCS11 PKCS11: Library: /usr/lib/libtacndp11.so Pin: 12345678 Label: "Dinamo HSM" hash: SHA2 security: 256 Immutable: false . . .
-
Cambiar el guión
fabric-samples/test-network/organisations/fabric-ca/registerEnroll.sh
para utilizar PKCS#11 y utilizar los archivos de configuración necesarios.-
Editar las funciones
crearOrg1
ecrearOrg2
con los siguientes cambios:-
Añadir al principio de la función, debajo de la línea (
export FABRIC_CA_CLIENT_HOME...
), el código siguiente para activar PKCS#11. -
Copie el archivo de configuración que se utilizará.
export FABRIC_CA_CLIENT_BCCSP_DEFAULT=PKCS11 cp ${PWD}/org1/fabric-ca-client-config.yaml $FABRIC_CA_CLIENT_HOME
Cambiar la ruta del archivo de configuración
fabric-ca-client-config.yaml
según la organización utilizada, por ejemploorg1/fabric-ca-client-config.yaml
eorg2/fabric-ca-client-config.yaml
. -
-
Utilice la
BCCSP
en software para generar el certificado TLS del peer.
Fabric no soporta actualmente PKCS#11 para su uso en TLS.
Seleccione el proveedor en software justo antes de generar el certificado TLS y vuelva a activar PKCS#11 justo después de generar el certificado.
1. Adicionar a linha: ```bash export FABRIC_CA_CLIENT_BCCSP_DEFAULT=SW ``` logo após a linha: ```bash infoln "Generating the peer0-tls certificates" ``` 1. Adicionar a linha: ```bash export FABRIC_CA_CLIENT_BCCSP_DEFAULT=PKCS11 ``` logo após a linha: ```bash { set +x; } 2>/dev/null ```
-
-
Cambiar el archivo
fabric-samples/test-network/scripts/createChannel.sh
con la configuración del cliente PKCS#11.- Añada la configuración PKCS#11 al principio de la función
crearCanal
.
export DFENCE_PKCS11_IP=127.0.0.1 export DFENCE_PKCS11_USER=peer1 export DFENCE_PKCS11_AUTO_RECONNECT=1
- Añade la siguiente línea al principio de la función
joinChannel
.
export FABRIC_CA_CLIENT_BCCSP_DEFAULT=PKCS11
-
Elimine la siguiente línea al principio de la función
joinChannel
.FABRIC_CFG_PATH=$PWD/../config/
-
Añada la configuración PKCS#11 antes de llamar a la función
createChannelGenesisBlock
.
export DFENCE_PKCS11_IP=host.docker.internal export DFENCE_PKCS11_USER=peer1 export DFENCE_PKCS11_AUTO_RECONNECT=1
-
Añade la configuración del usuario y la ruta a la configuración antes de cada llamada (
joinChannel
,setAnchorPeer
) relativa a una organización. -
Por ejemplo, par1añada las siguientes líneas antes de la llamada a
joinChannel 1
.export DFENCE_PKCS11_USER=peer1 FABRIC_CFG_PATH="${PWD}/../config/org1"
-
Por ejemplo, par2añada las siguientes líneas antes de la llamada a
joinCanal 2
etc.export DFENCE_PKCS11_USER=peer2 FABRIC_CFG_PATH="${PWD}/../config/org2"
- Añada la configuración PKCS#11 al principio de la función
-
Cambiar el archivo
fabric-samples/test-network/scripts/deployCC.sh
con la configuración PKCS#11.- Al principio del archivo, justo después de que se impriman los comandos en ejecución, por ejemplo, justo después de la línea:
println "- VERBOSE: ${C_GREEN}${VERBOSE}${C_RESET}"
- Sobrescribir la línea:
FABRIC_CFG_PATH=$PWD/../config/
Con la siguiente configuración:
FABRIC_CFG_PATH=$PWD/../config/org1 export DFENCE_PKCS11_IP=127.0.0.1 export DFENCE_PKCS11_USER=peer1 export DFENCE_PKCS11_AUTO_RECONNECT=1
-
Añadir la configuración de usuario PKCS#11 y la configuración según cada llamada de función, referida a una organización.
-
Ejemplo, par1añade las líneas:
export DFENCE_PKCS11_USER=peer1 FABRIC_CFG_PATH="${PWD}/../config/org1"
antes de la línea:
installChaincode 1
-
Ejemplo, peer2añade las líneas:
export DFENCE_PKCS11_USER=peer2 FABRIC_CFG_PATH="${PWD}/../config/org2"
antes de la línea siguiente, y así sucesivamente.
installChaincode 2
-
Añada la configuración PKCS#11 al archivo
fabric-samples/test-network/scripts/setAnchorPeer.sh
.- Añade las líneas siguientes, justo antes de la llamada a
createAnchorPeerUpdate
.
La variable
$ORG
recibe el valor1
o2
en función de la llamada. En nuestro ejemplo, el peer de organización 1 es elpar1
y organización 2par2
. Esta construcción del nombre permitía seleccionar automáticamente al usuario.export DFENCE_PKCS11_IP=host.docker.internal export DFENCE_PKCS11_USER=peer$ORG export DFENCE_PKCS11_AUTO_RECONNECT=1
- Añade las líneas siguientes, justo antes de la llamada a
-
Creación de un script de prueba básico compatible con PKCS#11
test-p11-basic-transfer.sh
. Configurar PKCS#11 según cada organización.#!/bin/bash # # Execute basic asset transfer test # pushd ./fabric-samples/test-network export PATH=${PWD}/../bin:$PATH export FABRIC_CFG_PATH=$PWD/../config/org1 # Environment variables for Org1 export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org1MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp export CORE_PEER_ADDRESS=localhost:7051 # PKCS#11 configurations for Org1 export DFENCE_PKCS11_IP=127.0.0.1 # HSM IP Address export DFENCE_PKCS11_USER=peer1 # HSM User export DFENCE_PKCS11_AUTO_RECONNECT=1 peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"InitLedger","Args":[]}' peer chaincode query -C mychannel -n basic -c '{"Args":["GetAllAssets"]}' peer chaincode invoke -o localhost:7050 --ordererTLSHostnameOverride orderer.example.com --tls --cafile "${PWD}/organizations/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem" -C mychannel -n basic --peerAddresses localhost:7051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt" --peerAddresses localhost:9051 --tlsRootCertFiles "${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt" -c '{"function":"TransferAsset","Args":["asset6","Christopher"]}' # Environment variables for Org2 export CORE_PEER_TLS_ENABLED=true export CORE_PEER_LOCALMSPID="Org2MSP" export CORE_PEER_TLS_ROOTCERT_FILE=${PWD}/organizations/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt export CORE_PEER_MSPCONFIGPATH=${PWD}/organizations/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp export CORE_PEER_ADDRESS=localhost:9051 # PKCS#11 configurations for Org2 export DFENCE_PKCS11_USER=peer2 # HSM User export FABRIC_CFG_PATH=$PWD/../config/org2 peer chaincode query -C mychannel -n basic -c '{"Args":["ReadAsset","asset6"]}' popd
Vaya a la red de prueba y ejecute una prueba
-
Para cargar, ejecutar las pruebas y luego detener la red de pruebas, utilice los siguientes scripts.
./start-fabric.sh ./test-p11-basic-transfer.sh ./test-p11-ca-client.sh ./stop-fabric.sh