LOADING...
LOADING...
LOADING...
当前位置: 玩币族首页 > 行情分析 > 区块链研究实验室|Hyperledger Fabric的CA操作指南-part1

区块链研究实验室|Hyperledger Fabric的CA操作指南-part1

2020-08-11 陀螺财经 来源:火星财经
我们在我的本地主机中看到目录/tmp/hyperledger/org1/ca/crypto。我们首先在此目录中找到两个证书(ca-cert.pem和tls-cert.pem)。我们可以看到在peer1-org1容器的/ tmp/hyperledger/org1/peer1中可以看到localhost的整个目录/tmp/hyperledger/org1/peer1。

简介

作为许可的区块链平台,Hyperledger Fabric要求识别所有实体,无论是网络组件还是使用该平台的用户(客户端)。该识别通过数字证书来实现,并且需要用于证书发颁发和管理的基础设施。

虽然可以使用第三方来构建这个基础设施,但是Fabric CA提供了一种方便的方法,它可以生成Hyperledger Fabric系统所需的适当格式。在readthedoc中有一个很好的教程,《 Fabric CA操作指南》。它创建了一个典型的设置,并提供了非常详细的逐步说明。在实验过程中,我们会在各个角度进行某些观察以获得更全面的了解。同时,为了更好地工作,我还修正了一些命名不一致的问题,并更新了配置文件。希望这对您在学习本教程时有所帮助。

教程概述

Organization设置

整个设置总结如下:

1. 三个Organization:org0 是orderer organization, org1和org2 是peer organizations

2. org0有一个orderer(orderer1-org0),用于在Solo中提供orderer服务。

3. 在每个peer organizations(org1和org2)中,都有peer organizations(peer1-orgx,peer2-orgx)

4. 每个Organization都有一个管理员用户(admin-orgx)

以下是总体情况,供我们参考。我们将在下一部分立即解释最后一个专栏。

证书颁发机构设置

如果从CA角度看设置,那么本教程中有四个CA:

TLS-CA:CA为整个网络的网络组件(订购者和对等方)颁发TLS服务器证书。该证书仅用于TLS通信,并且与该结构网络中的身份有关。

RCA-ORGx(x = 0,1,2):它是每个organization中身份的根CA。一方面,它向组件和用户颁发所需的证书。另一方面,它代表形成结构网络时的organization(以MSP方式)。

最后一列供快速参考。我们将在本教程的后面部分看到这些目录。

本教程中使用的CA的摘要

完成证书颁发并完成结构网络设置后,在日常操作中不需要这些ca。他们不参与加入通道,部署链码,调用链码功能等。仅当新组件(添加一个orderer或多个peer)或新用户(添加更多客户端应用程序)加入设置和新证书时才需要它们生成。

操作流程:

这是本教程的整体流程(注意:这只是显示了一系列任务,此处显示的步骤不是教程中显示的步骤)

1. 启动四个CA,每个CA作为运行在容器中的Fabric-CA-Server。

2. 在localhost使用Fabric-CA-Client与这些CA进行交互。对于每个CA,请注册一个注册商,然后根据我们的教程设计开始所有organization的实体注册。

3. 对于每个organization,请使用Fabric-CA-Client来注册在2中注册的实体。现在,我们拥有所需的所有加密材料。

4. 将生成的加密材料放置在适当的目录中,这些目录将映射到docker-compose文件中定义的那些组件(order和peer)中。

5. 为每个组织准备MSP目录,创建结构网络时需要该目录。

6. 打开五个容器(一个order,四个peer)和两个CLI容器。

7. 创建通道并将peers连接到通道

8. 部署链码并观察链码中基于属性的访问控制(ABAC)功能。

配置文件

有两个配置文件:docker-compose文件(docker-compose.yaml)和通道工件文件(configtx.yaml)。

docker-compose.yaml被修改和更新以反映更改。

version:'2'networks:fabric-ca:services:ca-tls:container_name:ca-tlsimage:hyperledger/fabric-ca:1.4.2command:sh-c'fabric-ca-serverstart-d-btls-ca-admin:tls-ca-adminpw--port7052'environment:-FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto-FABRIC_CA_SERVER_TLS_ENABLED=true-FABRIC_CA_SERVER_CSR_CN=tls-ca-FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0-FABRIC_CA_SERVER_DEBUG=truevolumes:-/tmp/hyperledger/tls-ca:/tmp/hyperledger/fabric-canetworks:-fabric-caports:-7052:7052rca-org0:container_name:rca-org0image:hyperledger/fabric-ca:1.4.2command:sh-c'fabric-ca-serverstart-d-brca-org0-admin:rca-org0-adminpw--port7053'environment:-FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto-FABRIC_CA_SERVER_TLS_ENABLED=true-FABRIC_CA_SERVER_CSR_CN=rca-org0-FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0-FABRIC_CA_SERVER_DEBUG=truevolumes:-/tmp/hyperledger/org0/ca:/tmp/hyperledger/fabric-canetworks:-fabric-caports:-7053:7053rca-org1:container_name:rca-org1image:hyperledger/fabric-ca:1.4.2command:sh-c'fabric-ca-serverstart-d-brca-org1-admin:rca-org1-adminpw--port7054'environment:-FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto-FABRIC_CA_SERVER_TLS_ENABLED=true-FABRIC_CA_SERVER_CSR_CN=rca-org1-FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0-FABRIC_CA_SERVER_DEBUG=truevolumes:-/tmp/hyperledger/org1/ca:/tmp/hyperledger/fabric-canetworks:-fabric-caports:-7054:7054rca-org2:container_name:rca-org2image:hyperledger/fabric-ca:1.4.2command:/bin/bash-c'fabric-ca-serverstart-d-brca-org2-admin:rca-org2-adminpw--port7055'environment:-FABRIC_CA_SERVER_HOME=/tmp/hyperledger/fabric-ca/crypto-FABRIC_CA_SERVER_TLS_ENABLED=true-FABRIC_CA_SERVER_CSR_CN=rca-org2-FABRIC_CA_SERVER_CSR_HOSTS=0.0.0.0-FABRIC_CA_SERVER_DEBUG=truevolumes:-/tmp/hyperledger/org2/ca:/tmp/hyperledger/fabric-canetworks:-fabric-caports:-7055:7055peer1-org1:container_name:peer1-org1image:hyperledger/fabric-peer:1.4.2environment:-CORE_PEER_ID=peer1-org1-CORE_PEER_ADDRESS=peer1-org1:7051-CORE_PEER_LOCALMSPID=org1MSP-CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer1/msp-CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock-CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca-FABRIC_LOGGING_SPEC=info-CORE_PEER_TLS_ENABLED=true-CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/signcerts/cert.pem-CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer1/tls-msp/keystore/key.pem-CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem-CORE_PEER_GOSSIP_USELEADERELECTION=true-CORE_PEER_GOSSIP_ORGLEADER=false-CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org1:7051-CORE_PEER_GOSSIP_SKIPHANDSHAKE=trueworking_dir:/opt/gopath/src/github.com/hyperledger/fabric/org1/peer1volumes:-/var/run:/host/var/run-/tmp/hyperledger/org1/peer1:/tmp/hyperledger/org1/peer1networks:-fabric-capeer2-org1:container_name:peer2-org1image:hyperledger/fabric-peer:1.4.2environment:-CORE_PEER_ID=peer2-org1-CORE_PEER_ADDRESS=peer2-org1:7051-CORE_PEER_LOCALMSPID=org1MSP-CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/peer2/msp-CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock-CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca-FABRIC_LOGGING_SPEC=info-CORE_PEER_TLS_ENABLED=true-CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org1/peer2/tls-msp/signcerts/cert.pem-CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org1/peer2/tls-msp/keystore/key.pem-CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer2/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem-CORE_PEER_GOSSIP_USELEADERELECTION=true-CORE_PEER_GOSSIP_ORGLEADER=false-CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2-org1:7051-CORE_PEER_GOSSIP_SKIPHANDSHAKE=true-CORE_PEER_GOSSIP_BOOTSTRAP=peer1-org1:7051working_dir:/opt/gopath/src/github.com/hyperledger/fabric/org1/peer2volumes:-/var/run:/host/var/run-/tmp/hyperledger/org1/peer2:/tmp/hyperledger/org1/peer2networks:-fabric-capeer1-org2:container_name:peer1-org2image:hyperledger/fabric-peer:1.4.2environment:-CORE_PEER_ID=peer1-org2-CORE_PEER_ADDRESS=peer1-org2:7051-CORE_PEER_LOCALMSPID=org2MSP-CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer1/msp-CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock-CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca-FABRIC_LOGGING_SPEC=info-CORE_PEER_TLS_ENABLED=true-CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/signcerts/cert.pem-CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer1/tls-msp/keystore/key.pem-CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem-CORE_PEER_GOSSIP_USELEADERELECTION=true-CORE_PEER_GOSSIP_ORGLEADER=false-CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1-org2:7051-CORE_PEER_GOSSIP_SKIPHANDSHAKE=trueworking_dir:/opt/gopath/src/github.com/hyperledger/fabric/org2/peer1volumes:-/var/run:/host/var/run-/tmp/hyperledger/org2/peer1:/tmp/hyperledger/org2/peer1networks:-fabric-capeer2-org2:container_name:peer2-org2image:hyperledger/fabric-peer:1.4.2environment:-CORE_PEER_ID=peer2-org2-CORE_PEER_ADDRESS=peer2-org2:7051-CORE_PEER_LOCALMSPID=org2MSP-CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/peer2/msp-CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock-CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=guide_fabric-ca-FABRIC_LOGGING_SPEC=info-CORE_PEER_TLS_ENABLED=true-CORE_PEER_TLS_CERT_FILE=/tmp/hyperledger/org2/peer2/tls-msp/signcerts/cert.pem-CORE_PEER_TLS_KEY_FILE=/tmp/hyperledger/org2/peer2/tls-msp/keystore/key.pem-CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer2/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem-CORE_PEER_GOSSIP_USELEADERELECTION=true-CORE_PEER_GOSSIP_ORGLEADER=false-CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2-org2:7051-CORE_PEER_GOSSIP_SKIPHANDSHAKE=true-CORE_PEER_GOSSIP_BOOTSTRAP=peer1-org2:7051working_dir:/opt/gopath/src/github.com/hyperledger/fabric/org2/peer2volumes:-/var/run:/host/var/run-/tmp/hyperledger/org2/peer2:/tmp/hyperledger/org2/peer2networks:-fabric-caorderer1-org0:container_name:orderer1-org0image:hyperledger/fabric-orderer:1.4.2environment:-ORDERER_HOME=/tmp/hyperledger/orderer-ORDERER_HOST=orderer1-org0-ORDERER_GENERAL_LISTENADDRESS=0.0.0.0-ORDERER_GENERAL_GENESISMETHOD=file-ORDERER_GENERAL_GENESISFILE=/tmp/hyperledger/org0/orderer/genesis.block-ORDERER_GENERAL_LOCALMSPID=org0MSP-ORDERER_GENERAL_LOCALMSPDIR=/tmp/hyperledger/org0/orderer/msp-ORDERER_GENERAL_TLS_ENABLED=true-ORDERER_GENERAL_TLS_CERTIFICATE=/tmp/hyperledger/org0/orderer/tls-msp/signcerts/cert.pem-ORDERER_GENERAL_TLS_PRIVATEKEY=/tmp/hyperledger/org0/orderer/tls-msp/keystore/key.pem-ORDERER_GENERAL_TLS_ROOTCAS=[/tmp/hyperledger/org0/orderer/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem]-ORDERER_GENERAL_LOGLEVEL=debug-ORDERER_DEBUG_BROADCASTTRACEDIR=data/logsvolumes:-/tmp/hyperledger/org0/orderer:/tmp/hyperledger/org0/orderer/networks:-fabric-cacli-org1:container_name:cli-org1image:hyperledger/fabric-tools:1.4.2tty:truestdin_open:trueenvironment:-GOPATH=/opt/gopath-FABRIC_LOGGING_SPEC=INFO-CORE_PEER_ID=cli-CORE_PEER_ADDRESS=peer1-org1:7051-CORE_PEER_LOCALMSPID=org1MSP-CORE_PEER_TLS_ENABLED=true-CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem-CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org1/admin/mspworking_dir:/opt/gopath/src/github.com/hyperledger/fabric/org1command:shvolumes:-/tmp/hyperledger/org1/peer1:/tmp/hyperledger/org1/peer1-/tmp/hyperledger/org1/peer2:/tmp/hyperledger/org1/peer2-/Users/kctam/hf142/fabric-samples/chaincode:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode-/tmp/hyperledger/org1/admin:/tmp/hyperledger/org1/adminnetworks:-fabric-cacli-org2:container_name:cli-org2image:hyperledger/fabric-tools:1.4.2tty:truestdin_open:trueenvironment:-GOPATH=/opt/gopath-FABRIC_LOGGING_SPEC=INFO-CORE_PEER_ID=cli-CORE_PEER_ADDRESS=peer1-org2:7051-CORE_PEER_LOCALMSPID=org2MSP-CORE_PEER_TLS_ENABLED=true-CORE_PEER_TLS_ROOTCERT_FILE=/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem-CORE_PEER_MSPCONFIGPATH=/tmp/hyperledger/org2/admin/mspworking_dir:/opt/gopath/src/github.com/hyperledger/fabric/org2command:shvolumes:-/tmp/hyperledger/org2/peer1:/tmp/hyperledger/org2/peer1-/tmp/hyperledger/org2/peer2:/tmp/hyperledger/org2/peer2-/Users/kctam/hf142/fabric-samples/chaincode:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode-/tmp/hyperledger/org2/admin:/tmp/hyperledger/org2/adminnetworks:-fabric-ca

docker-compose.yaml

这是用于生成通道工件的配置(configtx.yaml)。

##################################################################################Section:Organizations##-Thispdefinesthedifferentorganizationalidentitieswhichwill#bereferencedlaterintheconfiguration.#################################################################################Organizations:-&org0Name:org0#IDtoloadtheMSPdefinitionasID:org0MSP#MSPDiristhefilesystempathwhichcontainstheMSPconfigurationMSPDir:/tmp/hyperledger/org0/msp-&org1Name:org1#IDtoloadtheMSPdefinitionasID:org1MSP#MSPDiristhefilesystempathwhichcontainstheMSPconfigurationMSPDir:/tmp/hyperledger/org1/mspAnchorPeers:#AnchorPeersdefinesthelocationofpeerswhichcanbeused#forcrossorggossipcommunication.Note,thisvalueisonly#encodedinthegenesisblockintheApplicationpcontext-Host:peer1-org1Port:7051-&org2Name:org2#IDtoloadtheMSPdefinitionasID:org2MSP#MSPDiristhefilesystempathwhichcontainstheMSPconfigurationMSPDir:/tmp/hyperledger/org2/mspAnchorPeers:#AnchorPeersdefinesthelocationofpeerswhichcanbeused#forcrossorggossipcommunication.Note,thisvalueisonly#encodedinthegenesisblockintheApplicationpcontext-Host:peer1-org2Port:7051##################################################################################SECTION:Application##Thispdefinesthevaluestoencodeintoaconfigtransactionor#genesisblockforapplicationrelatedparameters#################################################################################Application:&ApplicationDefaults#Organizationsisthelistoforgswhicharedefinedasparticipantson#theapplicationsideofthenetworkOrganizations:##################################################################################Profile##-Differentconfigurationprofilesmaybeencodedheretobespecified#asparameterstotheconfigtxgentool#################################################################################Profiles:OrgsOrdererGenesis:Orderer:#OrdererType:Theordererimplementationtostart#Availabletypesare"solo"and"kafka"OrdererType:soloAddresses:-orderer1-org0:7050#BatchTimeout:TheamountoftimetowaitbeforecreatingabatchBatchTimeout:2s#BatchSize:ControlsthenumberofmessagesbatchedintoablockBatchSize:#MaxMessageCount:ThemaximumnumberofmessagestopermitinabatchMaxMessageCount:10#AbsoluteMaxBytes:Theabsolutemaximumnumberofbytesallowedfor#theserializedmessagesinabatch.AbsoluteMaxBytes:99MB#PreferredMaxBytes:Thepreferredmaximumnumberofbytesallowedfor#theserializedmessagesinabatch.Amessagelargerthanthepreferred#maxbyteswillresultinabatchlargerthanpreferredmaxbytes.PreferredMaxBytes:512KB#Kafka:##Brokers:AlistofKafkabrokerstowhichtheordererconnects##NOTE:UseIP:portnotation#Brokers:#-127.0.0.1:9092#Organizationsisthelistoforgswhicharedefinedasparticipantson#theorderersideofthenetworkOrganizations:-*org0Consortiums:SampleConsortium:Organizations:-*org1-*org2OrgsChannel:Consortium:SampleConsortiumApplication:<<:*ApplicationDefaultsOrganizations:-*org1-*org2

目录结构

我们创建/tmp/hyperledger以保留整个教程中生成的所有材料。我们正在本地主机中使用Fabric-CA-Client执行所有证书生成。结果全部保存在/tmp/hyperledger的子目录中。在课程中,我们将看到四个子目录tls-ca,org0,org1,org2,并在教程中查看目录中的内容。

同时,目录被用于两个目的。

映射到网络组件

如果我们看一下网络组件(orderers或peers),我们将看到卷映射。以peer1-org1为例。

从卷中,我们可以看到在peer1-org1容器的/ tmp/hyperledger/org1/peer1中可以看到localhost的整个目录/tmp/hyperledger/org1/peer1,该目录中的那些材料将用作标识(MSP)和 TLS相关材料。

在其他网络组件中也可以看到类似的情况。

构成联盟网络的配置

在我们的设置中,这三个组织正在形成一个联盟网络。他们由其会员服务提供商(MSP)代表。我们来看一下配置文件(摘录)。

从configtx.yaml中提取,显示结构网络中所有组织的MSP

因此,完成注册后,我们将提供正确的证书以形成这些目录/tmp/hyperledge/orgx/msp。在结构上有特定的要求,我们将在本教程中看到它们。

了解Fabric-CA-Server

由于本教程涉及很多Fabric CA Server,因此让我们首先看一下内部的工作情况。

这里我们以RCA-ORG1为例。RCA-ORG1的docker compose文件是这样的。

根据此设置,我们将学习

该Fabric-CA-Server的宿主映射到本地主机的/tmp/hyperledger/org1/ca/crypto。在教程中,我们很少进入容器。相反,我们可以检查和引用来自本地主机的材料。

CA用引导程序凭证定义。在此CA中,它是rca-org1-admin:rca-org1-adminpw。当我们使用Fabric-CA-Client注册管理员(注册商)时,将使用此功能。

启用了TLS。这样在CA启动并运行后,它将颁发TLS服务器证书。它仅用于访问此RCA-ORG1,不用于网络组件的TLS。请勿将其与TLS-CA混合使用,因为TLS-CA用于组织的网络组件的TLS服务器证书。

现在我们打开这个容器并进行观察。

提起RCA-ORG1容器。

这是RCA-ORG1的插图,具有我们所关注的那些组成部分。

观察目录结构(本地主机)。我们在我的本地主机中看到目录/tmp/hyperledger/org1/ca/crypto,这是RCA-ORG1的Fabric-CA-Server的服务器目录。

出于我们的目的,我们首先在此目录中找到两个证书(ca-cert.pem和tls-cert.pem)。我们来看看每种证书的主题和颁发者。

证书ca-cert.pem是org1的身份根CA证书(在我们的图中最上面的证书)。它是自签名证书(颁发者=主题)。根CA颁发和签名的所有证书(通过RCA的私钥)都可以通过此证书进行验证。

另一个证书tls-cert.pem由RCA颁发(请参阅颁发者)。这是我们图中的底部。这是仅用于与此RCA进行TLS通信的TLS服务器证书。具体而言,当客户端访问RCA-ORG1时,RCA-ORG1将向客户端提供此服务器证书。客户端将使用颁发者(即根CA证书)来验证此服务器证书,并确认客户端正在与正确的服务器(RCA-ORG1)通信,并且客户端与RCA-ORG1之间的通信已加密。

我们还可以找到与这两个证书相对应的私钥(密钥)。它们存储在msp/keystore中。

我们在这里看到两个。通过快速检查,我们知道哪个对应于哪个(方法是从私钥中推导出公钥,并将其与证书中的公钥进行比较)。

此私钥(647e…)用于ca-cert.pem

这个私钥(526e…)用于tls-cert.pem

最后,我们还看到一个数据库(sqlite3)。该数据库会跟踪所有即将进行的实体注册和注册。请注意,引导程序ID和密码也作为注册实体放置在数据库中。我们将看下一章教程中的展示该流程。

本文来源:陀螺财经
原文标题:区块链研究实验室|Hyperledger Fabric的CA操作指南-part1

—-

编译者/作者:陀螺财经

玩币族申明:玩币族作为开放的资讯翻译/分享平台,所提供的所有资讯仅代表作者个人观点,与玩币族平台立场无关,且不构成任何投资理财建议。文章版权归原作者所有。

知识 服务器
LOADING...
LOADING...