ICode9

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

HyperLedger-Fabric原理-MSP详解-MSP基础

2020-12-09 11:04:09  阅读:662  来源: 互联网

标签:Fabric 证书 组织 CA MSP HyperLedger 成员


把Fabric系统看成由不同的逻辑结构组成。其中MSP是一个逻辑结构,主要的功能是承担权限管理。

 

 那么,MSP是什么?它在Fabric中,又是以怎样的形式存在呢?接下来的这篇文章,将会做详细介绍。全文按照如下结构展开:

一,基本概念

MSP是Membership Service Provider的缩写,直译为成员关系服务提供者。为了更好的理解MSP,这里首先介绍MSP中的要用到的一些术语。

1>certificate 证书

证书(certificate)是Fabric中权限管理的基础。目前采用了基于ECDSA算法的非对称加密算法来生成公钥和私钥,证书格式则采用了X.509的标准规范。

Fabric中采用单独的Fabric CA项目来管理证书的生成。每一个实体、组织都可以拥有自己的身份证书,并且证书也遵循了组织结构,方便基于组织实现灵活的权限管理。

2>Member 成员

拥有网络唯一根证书的合法独立实体。

在Fabric区块链中,peer节点和app client这样的网络组件实际上就是一个Member。

在学习过程中,一度对成员与Peer之间的关系不太清楚,这里做一个总结如下:

成员 与 Peer的关系
Fabric网络提供的是联盟链服务,联盟由多个组织构成,组织中的成员提供了节点服务来维护网络,同时通过身份证书来进行权限管理。
通道概念就可以理解为一个通道(Fabric中的channel)对应一个联盟.
一个通道上可以有多个组织。每个组织(Fabric中的org)有多个成员。
也就是说,成员提供节点服务

一个组织中的成员可以根据网络中流量的要求,提供不同数量的节点服务来满足网络中的访问量。

3>Organization 组织

组织(organization)代表一组拥有共同信任的根证书(可以为根CA证书或中间CA证书)的成员。

这些成员由于共享同样的信任根,彼此之间信任度很高,可以相互交换比较敏感的内容。同一个组织的成员节点在网络中可以被认为是同一个身份,代表组织进行签名。组织中成员可以为普通成员角色或者管理员角色,后者拥有更高的权限,可以对组织配置进行修改。

组织一般包括名称、ID、MSP信息、管理策略、认证采用的密码库类型、一组锚点节点位置等信息。通常情况下,多个组织为了进行数据沟通,可以加入到同一个通道中。

 

 如上图所示,三家银行一共三个组织,两两加入到同一个通道中彼此进行相关数据交互,而无需担心被其他人看到。

4>Consortium 联盟

联盟由若干组织构成的集合,是联盟链场景所独有的结构形式。联盟一般用于多个组织相互合作的场景,例如某联盟中指定需要所有参与方同时对交易背书,才允许在网络中进行执行。

联盟中的组织成员会使用同一个排序服务,并且遵循相同的通道创建策略(Channel-CreationPolicy)。通道创建策略可以为ALL、MAJORITY或者ANY(默认值)。通道在创建时也必须指定所绑定的联盟信息。例如,某个联盟内可能定义必须要所有成员都同意才能创建新的通道;或者任何成员都可以自行创建新的通道。通道创建策略会成为所新建通道Application组的修改策略(mod_policy)。

在设置联盟时候,每个组织都需要指定自己的ID信息,该信息必须要跟该组织所关联的MSP ID一致。

5>MSP 成员关系服务提供者

成员服务提供者(MSP)是一个提供抽象化成员操作框架的组件。

MSP将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。

一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名)规则。也就是说,在一个运行的fabric系统网络中有众多的参与者,MSP就是为了管理这些参与者,可以辨识验证哪些人有资格,哪些人没资格,既维护某一个参与者的权限,也维护参与者之间的关系。

为了处理网络成员身份和身份,成员服务提供者(MSP)管理用户id,并对网络中的所有参与者进行身份验证。一个Fabric区块链网络可以由一个或多个MSPs控制。这提供了成员操作的模块化,以及跨不同成员标准和体系结构的互操作性。

当MSP的成员管理规则表示一个团体,组织或组织分工时,该名称会被引用。这又被成为MSP标识符或MSP ID。对于每个MSP实例,MSP标识符都必须独一无二。关于这一点,会在后面MSP实践中详细说明。

6>MS(Member Service) 成员服务

成员服务在许可的区块链网络上认证、授权和管理身份。在peer和order中运行的成员服务的代码都会认证和授权区块链操作。它是基于PKI的MSP实现。

 综上所述,成员是最基本的元素,它对应的是我们Fabric网络中的Peer节点或者Order节点或者Fabric-CA。MSP就是对这些成员进行身份的管理与验证的实现。

总结为一句话,成员关系服务提供者,给成员提供成员服务。这种服务是基于PKI的MSP实现的。

 

二,MSP的作用

从上面的解释中可知,MSP将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。

成员服务提供者(MSP)管理用户id,并对网络中的所有参与者进行身份验证。一个Fabric区块链网络可以由一个或多个MSPs控制。这提供了成员操作的模块化,以及跨不同成员标准和体系结构的互操作性。

三,MSP结构

Fabric中提出了成员服务提供者(Membership Service Provider,MSP)的概念,抽象代表了一个身份验证的实体。基于它可以实现对不同资源进行基于身份证书的权限验证。

成员服务提供者代表了用于对某个资源(成员、节点、组织等)进行身份验证的一组机制,是实现权限管理的基础。

基于MSP,资源实体可以对数据签名进行确认,网络可以对签名的身份进行验证。

通常情况下,一个组织或联盟可以对应到一个层级化的MSP。这里所谓的层级化的MSP,是指由根证书,生成中间件证书等组成的层级化的结构,从而实现不同管理员与普通成员之间的权限控制。

一个资源实体的MSP结构中往往包括签名和验证算法,以及一组符合X.509格式的证书,这些证书最后都需要追溯到同一个信任的根。

以下是一个MSP结构中常见的组成部分:

· 一组信任的根证书,是整个组织证书信任的基础,根证书可以签发中间层证书;
· MSP的管理员的身份证书,管理员可以对MSP中证书进行管理;
· 组织单元(Organizational Unit)列表(可选);
· 一组信任的中间证书,中间证书由根证书签发(可选);
· 证书撤销列表,代表被吊销的证书名单(可选)。

如果更详细一些,可以用下图来表示:

 

 1>Root CAs | 根证书列表

此文件夹包含,由此MSP代表的组织信任的Root CA,自签名X.509证书列表。此MSP文件夹中必须至少有一个Root CA X.509证书。这是最重要的文件夹,因为它标识了所有其它证书。

2>Intermediate CAs | 中间证书列表

此文件夹包含此组织信任的Intermediate CA的X.509证书列表。每个证书都必须由MSP中的一个Root CA签署,或者由 Intermediate CA 签署。

Intermediate CA可以表示组织的不同细分或组织本身(例如,如果商业CA用于组织的身份管理)。在前一种情况下,可以使用CA层次结构中,较低的其他Intermediate CA来表示组织细分。请注意,可能有一个没有任何中间CA的功能网络,在这种情况下,此文件夹将为空。

与Root CA文件夹一样,此文件夹定义了中间证书。只有拥有了这些证书,才能被系统视为组织成员的CA。

3>Organizational Units (OUs) | 组织单元列表

可选的

4>Administrators | 管理员身份证书

该文件夹包含一个身份列表,用于定义具有该组织管理员角色的参与者。对于标准MSP类型,此列表中应该有一个或多个X.509证书。

5>Revoked Certificates | 撤销证书列表

可选的

6>KeyStore for Private Key | 私钥库

该文件夹为peer 或 orderer节点(或客户端的local MSP)的local MSP定义,并包含节点的signing key(签名密钥)。 此密钥用于签署数据,作为认可阶段的一部分。

该文件夹对Local MSP是必须的,并且必须包含一个私钥。 很明显,访问这个文件夹,只能由,对此peer有管理权限的用户。

Channel MSP的配置不包括此部分,因为Channel MSP旨在提供纯粹的身份验证功能,而不是签署能力。

7>TLS Root CA | TLS根证书列表

此文件夹包含,此组织为TLS通信所信任的Root CA的自签名X.509证书列表。 TLS通信的一个例子是,peer需要连接到orderer以便它可以接收ledger更新。

MSP TLS信息涉及网络内的节点,即对peers 和 the orderers,此文件夹中必须至少有一个TLS Root CA X.509证书。

8>TLS Intermediate CA | TLS中间证书

此文件夹包含由此MSP代表的,组织信任的用于TLS通信的Intermediate CA证书列表。当商业CA用于组织的TLS证书时,此文件夹特别有用。 它是可选的。

 

 

Fabric中MSP相关实现代码都在msp目录下,目前采用了bccspmsp结构来代表一个成员身份结构,并且采用了MSPConfig(主要是其成员FabricMSPConfig)结构来代表跟该实体相关的证书信息。

MSP中各实体资源的证书必须被证书信任树上的叶子节点签名。中间层签名的证书会被认为是非法实体证书。

 

四,MSP实践

我们讲,MSP在Fabric中的作用是对用户进行管理。那么,它是怎么实现用户管理与权限认证的呢?

第一,生成相关的证书和签名。

第二,在Peer,Orderer,Channel等组件的配置文件设置关于msp的相关信心。

也就是说,要想初始化一个MSP实例:首先,要生成用户权限管理和签名认证的证书。然后,每一个peer节点和orderer节点,Channel等都需要在本地指定其配置。

注意channel上的全体成员均参与此过程。

在一个channel中,当MSP的成员管理规则表示一个团体,组织或组织分工时,该名称会被引用。这又被成为MSP标识符或MSP ID。对于每个MSP实例,MSP标识符都必须独一无二。举个例子:系统channel创建时如果检测到两个MSP有相同的标识符,那么orderer节点的启动将以失败告终。

在实际的操作中如下:

1. 编写crypto-config.yaml配置文件指定网络的拓扑结构和组织结构。

2. cryptogen-生成秘钥和证书文件。
快速地根据配置自动批量生成所需要的密钥和证书文件。

3. 编写依赖配置文件configtx.yaml。
该文件包含网络的定义,并给出了网络组件的每个网络实体的加密材料的存储位置。

4. configtxgen-生成通道配置。
在这个过程中,会生成系统channel的创世纪块。该创世纪块(genesis block)中包含所有MSP的验证元素。回忆一下,MSP验证元素有MSP身份标识(MSP identifier),root CAs,intermediate CAs,admin CAs,OU List,CRLs。

5. 在Peer节点和Order节点配置MSP相关的信息。
具体步骤会在后面“Fabric配置管理”中仔细讲解。

下面,对步骤1进行简单的说明:

使用cryptogen生成所需文件的命令:

cryptogen generate --config $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config.yaml --output crypto-config

上述命令解释如下:
·generate[flags]:生成密钥和证书文件;

其中,generate子命令支持如下参数:
·--output:指定存放生成密钥和证书文件的路径,默认为当前目录下的crypto-config目录;
·--config:指定所采用的配置模板文件的路径。

为了实现对Peer,Orderer以及Channel的管理,在搭建网络的过程中,我们只需要在它们的配置文件中,配置好相关的证书即可。

拿Peer配置为例:

 

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

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

 

标签:Fabric,证书,组织,CA,MSP,HyperLedger,成员
来源: https://www.cnblogs.com/ezgod/p/14107426.html

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

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

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

ICode9版权所有