ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

HyperLedger-Fabric原理-MSP详解-Peer&Orderer配置MSP

2020-12-09 13:32:44  阅读:313  来源: 互联网

标签:Fabric 证书 cert MSP pem Orderer org1 com example


本文是MSP详解的第二部分,我们通过第一部分对MSP有了初步的认识,下面我们来通过peer和order节点来对MSP做一个详细的讲解

本文会以下面的结构展开:

 

 

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

生成证书和公私钥的过程

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

1 cryptogen generate --config=./crypto-config.yaml

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

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

 

 

 二,目录解析

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

 

 

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

以peerOrganizations为例,该目录下有两个目录org1.example.com和org2.example.com。分别对应通道中Org1和Org2的相关证书和签名。

 

 

 

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

 

 

 

 org1.example.com表示Org1组织。

在peers目录下,有两个子目录peer0.org1.example.com和peer1.org1.example.com包含了这两个节点的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。

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

 

 

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

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

 

 

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

 

 

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

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

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

 

 

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

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

第二步详细过程

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

在节点的配置文件中,

peer对应的是core.yaml文件;

orderer对应的是orderer.yaml。

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

那么到底如何来指定呢?

下面将逐一讲解:

1>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等多个配置部分,如下图所示:

 

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

打开core.yaml文件,以下部分是关于MSP的配置

 

 

配置------>·mspConfigPath:

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

配置------->localMspId:

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

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

2>Orderer节点配置

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

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

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

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

 

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

 

 配置------>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节点和排序服务节点就有了签名证书,在通道节点之间传输数据时,要验证节点的签名,从而实现证书的验证和签名。

 

 

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   # 用户的身份私钥用来签名。

标签:Fabric,证书,cert,MSP,pem,Orderer,org1,com,example
来源: https://www.cnblogs.com/ezgod/p/14108030.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有