• -------------------------------------------------------------
  • ====================================

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP

区块链 dewbay 5年前 (2020-01-06) 2647次浏览 已收录 0个评论 扫描二维码

在文章《HyperLedger 实战-手动搭建一个 Fabric 网络》 中,我们介绍了 Fabric 网络的搭建过程。在启动网络之前,我们需要利用 cryptogen 以及 configtxgen 生成公私钥证书以及通道的创世区块和相关信息。而这些生成的文件,就是我们MSP实现的基础。

本文将结合《HyperLedger-Fabric 原理-MSP 详解(一)》 的理论部分以及《HyperLedger 实战-手动搭建一个 Fabric 网络》的实战部分,讲解 Fabric 中与MSP相关的文件夹及其实现方式。全文按照如下结构展开:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
全文结构

一、生成公私钥和证书信息

生成证书和公私钥的过程

Fabric 中有两种类型的公私钥和证书,一种是给节点之间,为了通讯安全而准备的TLS 证书,另一种是用户登录和权限控制的用户证书。这些证书本来应该是由 CA 来颁发,但是我们这里是测试环境,并没有启用 CA 节点,这里我们使用:cryptogen 来生成这两种证书。我们生成的公私钥和证书是依据配置文件 crypto-config.yaml 文件来生成的。关于该文件的详细介绍,参见《HyperLedger-Fabric1.0 原理-Fabric 网络搭建过程之配置文件》一文,这里不再赘述。

进入 fabric 根目录,运行下面命令生成公私钥证书:

cd examples/e2e_cli/
../../build/bin/cryptogen generate --config=./crypto-config.yaml

e2e_cli 例子中,生成的的网络拓扑结构如下图所示。

该命令会生成一个名为 crypto-config 的文件夹,该文件夹是基于 Fabric 网络的拓扑结构而来的:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
e2e_cli 生成的拓扑结构图

二、目录解析

生成的文件都保存到 crypto-config 文件夹,我们可以进入该文件夹查看生成了哪些文件:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP

查看当前目录下的 crypto-config 目录,生成 ordererOrganizations 和 peerOrganizations 两棵组织树。

以 peerOrganizations 为例,该目录下有两个目录 org1-example-com 和 org2-example-com。(由于编辑器的原因,本文将‘.’用’-‘来表示)分别对应通道中 Org1 和 Org2 的相关证书和签名。

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP

每个组织树下都包括 ca、msp、orderers(或 peers)、tlsca、users 五个子目录。

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP

org1-example-com 表示 Org1 组织。

在 peers 目录下,有两个子目录 peer0-org1-example-com 和 peer1-org1-example-com 包含了这两个节点的 msp 配置信息。

如下图所示:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP

接下来以org1-example-com 组织树为例,每个目录和文件对应的功能讲解。

该目录的树状结构如下所示,每个文件夹的功能,在代码块中已注释:

org1.example.com/
├── ca     # 存放组织 Org1 的根证书和对应的私钥文件默认采用 EC 算法证书为自签名组织内的实体将基于该根证书作为证书根
   ├── ca.org1.example.com-cert.pem
   └── dfb841b77804d726eea25231ae5e89a31901ca0538688a6d764731148f0bdc5b_sk
├── msp    # 存放代表该组织的身份信息
   ├── admincerts         # 组织管理员的身份验证证书被根证书签名
      └── Admin@org1.example.com-cert.pem
   ├── cacerts # 组织的根证书同 ca 目录下文件
      └── ca.org1.example.com-cert.pem
   └── tlscacerts          # 用于 TLS 的 CA 证书自签名
       └── tlsca.org1.example.com-cert.pem
├── peers   # 存放属于该组织的所有Peer节点
   ├── peer0.org1.example.com    # 第一个 peer 的信息包括其 msp 证书和 tls 证书两类
      ├── msp # msp 相关证书   
         ├── admincerts  # 组织管理员的身份验证证书Peer将基于这些证书来认证交易签署者是否为管理员身份
            └── Admin@org1.example.com-cert.pem
         ├── cacerts     # 存放组织的根证书
            └── ca.org1.example.com-cert.pem
         ├── keystore    # 本节点的身份私钥用来签名
            └── 59be216646c0fb18c015c58d27bf40c3845907849b1f0671562041b8fd6e0da2_sk
         ├── signcerts   # 验证本节点签名的证书被组织根证书签名 
            └── peer0.org1.example.com-cert.pem
         └── tlscacerts  # TLS 连接用到身份证书即组织 TLS 证书
             └── tlsca.org1.example.com-cert.pem
      └── tls # tls 相关证书
          ├── ca.crt      # 组织的根证书
          ├── server.crt  # 验证本节点签名的证书被组织根证书签名
          └── server.key  # 本节点的身份私钥用来签名
   └── peer1.org1.example.com    # 第二个 peer 的信息结构类似。(此处省略。)
       ├── msp
          ├── admincerts
             └── Admin@org1.example.com-cert.pem
          ├── cacerts
             └── ca.org1.example.com-cert.pem
          ├── keystore
             └── 82aa3f8f9178b0a83a14fdb1a4e1f944e63b72de8df1baeea36dddf1fe110800_sk
          ├── signcerts
             └── peer1.org1.example.com-cert.pem
          └── tlscacerts
              └── tlsca.org1.example.com-cert.pem
       └── tls
           ├── ca.crt
           ├── server.crt
           └── server.key
├── tlsca    # 存放 tls 相关的证书和私钥
   ├── 00e4666e5f56804274aadb07e2192db2f005a05f2f8fcfd8a1433bdb8ee6e3cf_sk
   └── tlsca.org1.example.com-cert.pem
└── users    # 存放属于该组织的用户的实体
    ├── Admin@org1.example.com    # 管理员用户的信息其中包括 msp 证书和 tls 证书两类
       ├── msp # msp 相关证书
          ├── admincerts     # 组织根证书作为管理员身份验证证书 
             └── Admin@org1.example.com-cert.pem
          ├── cacerts        # 存放组织的根证书
             └── ca.org1.example.com-cert.pem
          ├── keystore       # 本用户的身份私钥用来签名
             └── fa719a7d19e7b04baebbe4fa3c659a91961a084f5e7b1020670be6adc6713aa7_sk
          ├── signcerts      # 管理员用户的身份验证证书被组织根证书签名要被某个Peer认可则必须放到该Peer的 msp/admincerts 目录下
             └── Admin@org1.example.com-cert.pem
          └── tlscacerts     # TLS 连接用的身份证书即组织 TLS 证书
              └── tlsca.org1.example.com-cert.pem
       └── tls # 存放 tls 相关的证书和私钥
           ├── ca.crt       # 组织的根证书
           ├── server.crt   # 管理员的用户身份验证证书被组织根证书签名
           └── server.key   # 管理员用户的身份私钥被组织根证书签名
    └── User1@org1.example.com    # 第一个用户的信息包括 msp 证书和 tls 证书两类
        ├── msp # msp 证书相关信息
           ├── admincerts   # 组织根证书作为管理者身份验证证书
              └── User1@org1.example.com-cert.pem
           ├── cacerts      # 存放组织的根证书
              └── ca.org1.example.com-cert.pem
           ├── keystore     # 本用户的身份私钥用来签名
              └── 97f2b74ee080b9bf417a4060bfb737ce08bf33d0287cb3eef9b5be9707e3c3ed_sk
           ├── signcerts    # 验证本用户签名的身份证书被组织根证书签名
              └── User1@org1.example.com-cert.pem
           └── tlscacerts   # TLS 连接用的身份证书被组织根证书签名
               └── tlsca.org1.example.com-cert.pem
        └── tls # 组织的根证书
            ├── ca.crt       # 组织的根证书
            ├── server.crt   # 验证用户签名的身份证书被根组织证书签名
            └── server.key   # 用户的身份私钥用来签名

上面目录结构中的所有文件,就是我们用 cryptogen 工具来生成的MSP需要用到的证书和相关文件。主要包括各种证书和相关的签名。


三、Peer&Orderer 配置 MSP

简介

在上面,使用工具已经为我们生成了相关的目录和对应的文件。如果没有工具,需要我们手动建立目录,以及手动配置MSP,该怎么做呢?

  • 主要分成两步:

第一步:
在 peer / orderer 对应的目录下,建立几个子文件夹,放入对应的证书,签名等相关信息。
第二步:
Peer/orderer 的配置文件中,设置证书和签名的路径。
节点的配置文件如下:(peer 对应的是 core.yaml 文件 , orderer 对应的是 orderer.yaml)。

配置过程介绍

  • 第一步详细过程

要想(为 peer 节点或 orderer 节点)建立本地MSP,管理员应创建一个文件夹(如$MY_PATH/mspconfig)并在其下包含 6 个子文件夹与一个文件:

  1. 文件夹 admincerts包含 PEM 文件:每个 PEM 文件对应于一个管理员证书。
  2. 文件夹 cacerts包含 PEM 文件:每个 PEM 文件对应于一个根 CA 的证书。
  3. 一个文件夹 signcerts包含节点的 X.509 证书的 PEM 文件。
  4. (可选)文件夹 intermediatecerts 包含一些 PEM 文件:每个 PEM 文件对应于一个中间 CA 的证书。
  5. (可选)一个文件夹,tlscacerts 以包含每个对应于 TLS 根 CA 证书的 PEM 文件
  6. (可选)文件夹crls包含相关 CRL。
  7. 文件夹 keystore包含一个 PEM 文件及节点的签名密钥;我们必须强调:现阶段还不支持 RSA 密钥。
  8. (可选)文件夹tlscacerts包含如下 PEM 文件:每个 PEM 文件对应于一个根 TLS 根 CA 的证书
  9. (可选)文件夹 tlsintermediatecerts 包含如下 PEM 文件:每个 PEM 文件对应于一个中间 TLS CA 的证书

在 e2e_cli 中,该 Org1 组织中的有两个节点,一个是管理员 peer0,另一个是用户 peer1。

这两个节点的文件路径如下:

../examples/e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers

peers 文件夹下有两个文件,分别他们是 peer0 和 peer1 的本地MSP配置文件所在:

peer0.org1.example.com  peer1.org1.example.com

进入 http://peer0.org1.example.com 文件夹下,可以看到如下两个文件夹

msp  tls

此时,文件的当前目录为:

../examples/e2e_cli/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp

该目录即为 peer0.org1 节点进行 msp 配置的文件目录。

一般情况,存放 msp 配置的相关信息的文件夹可以命名为 mspconfig 或者 msp。

其中,msp 的文件目录结构如下所示:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
Org1-Peer0 的本地 MSP 文件配置

这五个文件夹下分别放了 Peer0 节点完成证书与签名认证所需要的相关文件。

至此,完成了Peer&Orderer配置 MSP 的第一步了。

  • 第二步详细过程

第一步的主要目的,是准备相关的证书和签名。第二步,就是要将这些文件路径配置到 Peer | Orderer的配置文件中。这样,在启动节点时,就能够找到相应的证书和签名进行认证。

在节点的配置文件中,

peer 对应的是 core.yaml 文件;

orderer 对应的是 orderer.yaml。

我们需要在这些配置文件中指定 mspconfig 文件夹的路径和节点 MSP 的 MSP 标识符。

那么到底如何来指定呢?

下面将逐一讲解:

Peer 节点配置

当 Peer 节点作为服务端启动时,会按照优先级从高到低的顺序依次尝试从命令行参数、环境变量或配置文件中读取配置信息。这里,我们主要通过配置文件的方式来对 Peer 进行配置。

  • 读取配置信息的顺序
  1. Peer 节点默认的配置文件读取路径为$FABRIC_CFG_PATH/core.yaml;
  2. 如果没找到,则尝试查找当前目录下的./core.yaml 文件;
  3. 如果还没有找到,则尝试查找默认的/etc/hyperledger/fabric/core.yaml 文件。

在结构上,core.yaml 文件中一般包括 logging、peer、vm、chaincode、ledger 五大部分,其中,与 MSP 配置相关的主要是 peer 部分。下面见介绍如何对 Peer 部分进行配置,实现 MSP。

peer 部分包括了许多跟服务直接相关的核心配置,内容也比较多,包括 msp 配置、gossip、events、tls 等多个配置部分,如下图所示:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
core.yaml 文件中 peer 配置部分

下面将着重介绍通用配置中的 MSP 配置:

进入 core.yaml 文件夹,以下部分是关于 MSP 的配置

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
core.yaml 中配置 local-MSP

配置——>·mspConfigPath:

MSP 目录所在的路径,可以为绝对路径,或相对配置目录的路径,一般建议为/etc/hyperledger/fabric/msp;本例中,写的是相对路径 msp

配置——->localMspId:

Peer 所关联的 MSP 的 ID,一般为组织单位名称,需要与联盟配置中的名称一致;

到这里,就已经完成了对 Peer 节点的 LocalMSP 配置。

Orderer节点配置

orderer 节点对应的配置文件是 orderer.yaml。

Orderer节点可以组成集群来在 Fabric 网络中提供排序服务。类似地,支持从命令行参数、环境变量或配置文件中读取配置信息。

当从环境变量中读入配置时,需要以 ORDERER_ 前缀开头,例如配置文件中的 general.ListenAddress 项,对应到环境变量 ORDERER_GENERAL_LISTENADDRESS。

在结构上,orderer.yaml 文件中一般包括General、FileLedger、RAMLedger、Kafka四大部分,其中,涉及 MSP 配置的部分在 General。General 部分的配置如下所示:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
orderer.yaml 文件中的 General 部分

其中,LocalMSPDir,LocalMSPID 为配置本地 msp 的主要部分。进入该 orderer.yaml 文件,该部分如下图所示:

11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
Orderer.yaml 文件中配置 localMSP

配置——>LocalMSPDir:

MSP 目录所在的路径,可以为绝对路径或相对路径,一般建议为$FABRIC_CFG_PATH/msp;

配置——>localMspId:

Orderer所关联的 MSP 的 ID,需要与联盟配置中的组织的 MSP 名称一致;

到这里,就已经完成了对 Orderer 节点的 LocalMSP 配置。


四、总结

在这一篇文章中,我们发现 Fabric 的配置是一门很大的学问。这里,对 msp 的实现,就是通过配置文件来实现的。

我们通过相关工具,生成了系统中所需要的证书和签名等。

这一部分涉及 crypro-config.yaml 文件。

利用该配置文件,我们可以定义网络拓扑,以及生成相关证书。

生成 MSP 相关证书和文件后,我们对 Peer 和 Orderer 进行了 MSP 配置。这一部分也是通过配置文件来实现的。

core.yaml 是 Peer 节点的配置文件,通过对 Peer 部分的 mspConfigPath 和 localMspId 字段,来完成 msp 配置。

Orderer.yaml 是 Orderer 节点的配置文件,通过对 General 部分的 LocalMSPDir 和 localMspId 字段,来完成 msp 配置。

到目前为止,我们了解了 MSP 的基本组成,基本功能,以及对 Peer&Orderer 节点的配置。

总结下来,MSP 的 peer&Orderer 节点配置就是,在每一个 Peer 节点和排序服务节点上设置 MSP 目录,放入相关的证书和签名公私钥,然后在对应的配置文件中,设置 msp 文件路径。Peer 节点和排序服务节点就有了签名证书,在通道节点之间传输数据时,要验证节点的签名,从而实现证书的验证和签名。

后面,我们会介绍如何对 ChannelMSP 进行配置,毫无疑问,这肯定也离不开配置~

 

 

转自知乎 苏小乐 :https://www.zhihu.com/people/shan-de-ding-zhu/activities


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:11-HyperLedger-Fabric原理-MSP详解(二)-Peer&Orderer配置MSP
喜欢 (1)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址