Hyperledger Fabric网络手工运行

本文作者:HiBlock区块链技术布道群-冯宇Ops

原文发布于简书

在之前的文章我们已经介绍了快速在本地运行Fabric,以及介绍了Fabric的模型和工具(——Linux环境下搭建Hyperledger Fabric(附流程代码))。本次我们会手工运行Fabric的工具,手动搭建一个Fabric网络,来巩固和熟悉Fabirc。

在开始搭建之前我们需要先提一下Fabric的身份认证。之前我们说过Fabric是支持安全认证的,而Fabric的安全认证则是通过PKI(Public Key Infrastructure)方式认证的。

1

Fabric的PKI认证流程

Fabric默认采用业界比较普遍的X.509协议证书,同时这也是ssl证书普遍采用的格式。这套PKI体系有以下四个关键要素:

数字证书

公钥私钥对

认证中心(CA)

证书吊销列表

有关PKI体系的流程可以参考这篇文章(https://blog.csdn.net/huakai_sun/article/details/79988465)。在整套PKI体系中,最重要的莫过于CA了,CA机构必须具有权威性和公正性,所以在Fabric网络中,直接内置了一个Fabric CA。但是注意,Fabirc CA是可选组件,你完全可以自建CA或者直接使用第三方可靠的CA。

Fabric CA的使用方式参考官方文档(https://hyperledger-fabric-ca.readthedocs.io/en/latest/)

2

动手自己搭建一个Fabric网络

之前如果运行过官方的Sample的话,会以脚本的形式运行若干个docker容器,组建Fabric网络。但是没有什么比自己动手搭建更快上手的了。在了解了Fabric整个模型和运行方式之后,我们完全可以自己动手搭建一个Fabric网络。

3

搭建CA与生成组织证书

Fabric是联盟链的解决方案,在联盟链的成员中,必然存在组织这样的概念。要加入Fabric网络的组织必须有自己的身份标识。所以第一步我们必须为组织生成一个证书,用于确认身份以及加密通信。

Fabric工具中就带一个cryptogen工具,用于快速批量生成组织证书。当然如果熟悉openssl的读者完全可以用openssl直接生成x.509格式的证书。

/path/to/cryptogen showtemplate

可以显示默认的证书模板,用于编写配置参考,这个配置文件也充满了大量的注释,帮助用户理解配置文件的含义。也可以直接把这个默认配置导出来在此基础之上修改:

/path/to/cryptogen showtemplate > template.yml

该工具使用的配置格式为yaml,一个简易的配置片段大致如下:

OrdererOrgs:

- Name: Orderer

Domain: example.com

Specs:

- Hostname: orderer

PeerOrgs:

- Name: Org1

Domain: org1.example.com

EnableNodeOUs: false

之前我们说过,Fabric网络中有三种节点Orderer,Peer,Client,这里就是直接生成Order和Peer节点配置的含义,每个OrdererOrgs或PeerOrgs下面的list配置大致包含以下几个内容:

Name: 就是给组织起的名字

Domain: 组织的域名

Specs: 就是定义该组织下每个节点的信息,以list形式配置

Hostname(必选): 主机名

CommonName(可选): 用于覆盖X509证书中的CN配置的

SANS(可选): 其他x509证书中的Subject信息

Template: 定义模板,批量产生证书

由于cryptogen工具默认带有一个模板配置文件,因此我们可以直接用它来产生一个Orderer组织,两个Peer组织的证书:

产生的证书位于crypto-config/目录下,直接用tree看看都产生了什么玩意吧:

$ tree -L 3 crypto-config

crypto-config

├── ordererOrganizations

│ └── example.com

│ ├── ca

│ ├── msp

│ ├── orderers

│ ├── tlsca

│ └── users

└── peerOrganizations

├── org1.example.com

│ ├── ca

│ ├── msp

│ ├── peers

│ ├── tlsca

│ └── users

└── org2.example.com

├── ca

├── msp

├── peers

├── tlsca

└── users20 directories, 0 files

最后每个子目录下面就是具体的证书文件了,包含组织的证书,CA证书,管理员证书,以及用户证书等等。所有的身份都是通过PKI认证的。

当然我们也可以通过使用自己的配置,指定证书产生的目录:

$ /path/to/cryptogen generate --config=config.yml --output=/path/to/outdir

4

创建交易配置

第一次运行我们需要创建创世纪块,以后交易我们需要记录到区块中,这些功能都可以通过configtxgen这个工具来完成。

这个工具就稍微有些繁琐了,首先这个工具必须在当前目录下找到一个名为configtx.yaml的配置文件,这个配置文件里面存放着各种各样的Profile。这个配置文件的格式可以参考源码的范例。

configtxgen每次执行的时候必须有一个-profile参数,指明使用configtx.yaml哪个profile,产生什么样的配置(比如创世纪块,交易配置,peer配置等等)。

按照之前的Sample运行的命令,应该是这样:

$ /path/to/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

2018-05-27 21:28:28.501 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration

2018-05-27 21:28:28.522 CST [common/tools/configtxgen] doOutputBlock -> INFO 002 Generating genesis block

2018-05-27 21:28:28.524 CST [common/tools/configtxgen] doOutputBlock -> INFO 003 Writing genesis block

这条命令会在./channel-artifacts/目录下产生一个genesis.block创世纪块,注意./channel-artifacts/目录必须事先存在,否则会报错。

交易的双方必须加入同一个channel,因此我们还需要产生一个channel配置:

$ configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel

2018-05-27 21:32:10.966 CST [common/tools/configtxgen] main -> INFO 001 Loading configuration

2018-05-27 21:32:10.978 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 002 Generating new channel configtx

2018-05-27 21:32:11.050 CST [common/tools/configtxgen] doOutputChannelCreateTx -> INFO 003 Writing new channel tx

按照终端日志输出,我们在./channel-artifacts/产生了一个channel.tx。我们可以分别用-inspectBlock参数和-inspectChannelCreateTx参数分别跟上这两个文件,打印出区块和channel的JSON配置信息。能看到正确的输出,说明创建成功了。

5

启动节点

其实这是我最想吐槽官方文档的地方,明知道应该用命令行工具peer和orderer启动两种类型的节点,但是官方文档却只字不提。甚至peer和orderer的命令行帮助文档也简略到看了也不知道怎么启动。

目前在没有仔细研究官方Docker镜像的前提下,只能通过Docker启动orderer和Peer。

$ docker-compose -f docker-compose-cli.yaml up

这个docker-compose-cli.yaml文件存在于fabric-samples/first-network/文件夹中。

好在官方比较良心的出了一个composer工具,否则光运行网络节点这些步骤绝对能让开发者敲桌。后续我们会逐步结合composer与官方文档的内容,讲述利用composer简化Fabric网络的搭建、测试、部署流程。

-- 活动推荐 --

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180607B09U9500?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券