阅读 222

Hyperledger Fabric网络手工运行

image

在之前的文章我们已经介绍了快速在本地运行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,这里就是直接生成OrderPeer节点配置的含义,每个OrdererOrgsPeerOrgs下面的list配置大致包含以下几个内容:

  • Name: 就是给组织起的名字

  • Domain: 组织的域名

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

    Hostname(必选): 主机名

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

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

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

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

$ cryptogen generate
org1.example.com
org2.example.com
复制代码

产生的证书位于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

启动节点

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

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

$ docker-compose -f docker-compose-cli.yaml up
复制代码

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

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

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

原文发布于简书

加微信baobaotalk_com,加入技术布道群

以下是我们的社区介绍,欢迎各种合作、交流、学习:)

image

文章分类
阅读