Hyperledger Fabric网络手工运行

在之前的文章我们已经介绍了快速在本地运行Fabric,以及介绍了Fabric的模型和工具。本次我们会手工运行Fabric的工具,手动搭建一个Fabric网络,来巩固和熟悉Fabirc。

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

Fabric的PKI认证流程

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

  • 数字证书
  • 公钥私钥对
  • 认证中心(CA)
  • 证书吊销列表

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

Fabric CA的使用方式参考官方文档

动手自己搭建一个Fabric网络

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

搭建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
        └── users

20 directories, 0 files

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

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

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

创建交易配置

第一次运行我们需要创建创世纪块,以后交易我们需要记录到区块中,这些功能都可以通过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配置信息。能看到正确的输出,说明创建成功了。

启动节点

其实这是我最想吐槽官方文档的地方,明知道应该用命令行工具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网络的搭建、测试、部署流程。

你可能感兴趣的:(Hyperledger Fabric网络手工运行)