在前面的文章中,我们分析了 Fabric 的架构,把 Fabric 系统看成由不同的逻辑结构组成。其中 MSP 是一个逻辑结构,主要的功能是承担权限管理。
fabric 架构
那么,MSP 是什么?它在 Fabric 中,又是以怎样的形式存在呢?接下来的这篇文章,将会做详细介绍。全文按照如下结构展开:
全文结构
一、基本概念
MSP 是 Membership Service Provider 的缩写,直译为成员关系服务提供者。为了更好的理解 MSP,这里首先介绍 MSP 中的要用到的一些术语。
certificate 证书
证书(certificate)是 Fabric 中权限管理的基础。目前采用了基于 ECDSA 算法的非对称加密算法来生成公钥和私钥,证书格式则采用了 X.509 的标准规范。
Fabric 中采用单独的 Fabric CA 项目来管理证书的生成。每一个实体、组织都可以拥有自己的身份证书,并且证书也遵循了组织结构,方便基于组织实现灵活的权限管理。
Member 成员
拥有网络唯一根证书的合法独立实体。
在 Fabric 区块链中,peer 节点和 app client 这样的网络组件实际上就是一个 Member。
在学习过程中,一度对成员与 Peer 之间的关系不太清楚,这里做一个总结。
成员 与 Peer 的关系
Fabric 网络提供的是联盟链服务,联盟由多个组织构成,组织中的成员提供了节点服务来维护网络,同时通过身份证书来进行权限管理。
通道概念就可以理解为一个通道(Fabric 中的 channel)对应一个联盟.
一个通道上可以有多个组织。每个组织(Fabric 中的 org)有多个成员。
也就是说,成员提供节点服务。一个组织中的成员可以根据网络中流量的要求,提供不同数量的节点服务来满足网络中的访问量。
Organization 组织
组织(organization)代表一组拥有共同信任的根证书(可以为根 CA 证书或中间 CA 证书)的成员。
这些成员由于共享同样的信任根,彼此之间信任度很高,可以相互交换比较敏感的内容。同一个组织的成员节点在网络中可以被认为是同一个身份,代表组织进行签名。组织中成员可以为普通成员角色或者管理员角色,后者拥有更高的权限,可以对组织配置进行修改。
组织一般包括名称、ID、MSP 信息、管理策略、认证采用的密码库类型、一组锚点节点位置等信息。通常情况下,多个组织为了进行数据沟通,可以加入到同一个通道中。
组织示例
如上图所示,三家银行一共三个组织,两两加入到同一个通道中彼此进行相关数据交互,而无需担心被其他人看到。
Consortium 联盟
联盟由若干组织构成的集合,是联盟链场景所独有的结构形式。联盟一般用于多个组织相互合作的场景,例如某联盟中指定需要所有参与方同时对交易背书,才允许在网络中进行执行。
联盟中的组织成员会使用同一个排序服务,并且遵循相同的通道创建策略(Channel-CreationPolicy)。通道创建策略可以为 ALL、MAJORITY 或者 ANY(默认值)。通道在创建时也必须指定所绑定的联盟信息。例如,某个联盟内可能定义必须要所有成员都同意才能创建新的通道;或者任何成员都可以自行创建新的通道。通道创建策略会成为所新建通道 Application 组的修改策略(mod_policy)。
在设置联盟时候,每个组织都需要指定自己的 ID 信息,该信息必须要跟该组织所关联的 MSP ID 一致。
MSP 成员关系服务提供者
成员服务提供者(MSP)是一个提供抽象化成员操作框架的组件。
MSP 将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。
一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名)规则。也就是说,在一个运行的 fabric 系统网络中有众多的参与者,MSP 就是为了管理这些参与者,可以辨识验证哪些人有资格,哪些人没资格,既维护某一个参与者的权限,也维护参与者之间的关系。
为了处理网络成员身份和身份,成员服务提供者(MSP)管理用户 id,并对网络中的所有参与者进行身份验证。一个 Fabric 区块链网络可以由一个或多个 MSPs 控制。这提供了成员操作的模块化,以及跨不同成员标准和体系结构的互操作性。
当 MSP 的成员管理规则表示一个团体,组织或组织分工时,该名称会被引用。这又被成为 MSP 标识符或 MSP ID。对于每个 MSP 实例,MSP 标识符都必须独一无二。关于这一点,会在后面 MSP 实践中详细说明。
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)列表(可选);
· 一组信任的中间证书,中间证书由根证书签发(可选);
· 证书撤销列表,代表被吊销的证书名单(可选)。
如果更详细一些,可以用下图来表示:
MSP 结构
Root CAs | 根证书列表
此文件夹包含,由此 MSP 代表的组织信任的 Root CA,自签名 X.509 证书列表。此 MSP 文件夹中必须至少有一个 Root CA X.509 证书。这是最重要的文件夹,因为它标识了所有其它证书。
Intermediate CAs | 中间证书列表
此文件夹包含此组织信任的 Intermediate CA 的 X.509 证书列表。每个证书都必须由 MSP 中的一个 Root CA 签署,或者由 Intermediate CA 签署。
Intermediate CA 可以表示组织的不同细分或组织本身(例如,如果商业 CA 用于组织的身份管理)。在前一种情况下,可以使用 CA 层次结构中,较低的其他 Intermediate CA 来表示组织细分。请注意,可能有一个没有任何中间 CA 的功能网络,在这种情况下,此文件夹将为空。
与 Root CA 文件夹一样,此文件夹定义了中间证书。只有拥有了这些证书,才能被系统视为组织成员的 CA。
Organizational Units (OUs) | 组织单元列表
可选的
Administrators | 管理员身份证书
该文件夹包含一个身份列表,用于定义具有该组织管理员角色的参与者。对于标准 MSP 类型,此列表中应该有一个或多个 X.509 证书。
Revoked Certificates | 撤销证书列表
可选的
KeyStore for Private Key | 私钥库
该文件夹为 peer 或 orderer 节点(或客户端的 local MSP)的 local MSP 定义,并包含节点的 signing key(签名密钥)。 此密钥用于签署数据,作为认可阶段的一部分。
该文件夹对 Local MSP 是必须的,并且必须包含一个私钥。 很明显,访问这个文件夹,只能由,对此 peer 有管理权限的用户。
Channel MSP 的配置不包括此部分,因为 Channel MSP 旨在提供纯粹的身份验证功能,而不是签署能力。
TLS Root CA | TLS 根证书列表
此文件夹包含,此组织为 TLS 通信所信任的 Root CA 的自签名 X.509 证书列表。 TLS 通信的一个例子是,peer 需要连接到 orderer 以便它可以接收 ledger 更新。
MSP TLS 信息涉及网络内的节点,即对 peers 和 the orderers,此文件夹中必须至少有一个 TLS Root CA X.509 证书。
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 配置为例:
peer 配置示例
mspConfigPath:MSP 目录所在的路径,可以为绝对路径,或相对配置目录的路径,一般建议为/etc/hyperledger/fabric/msp;
localMspId 关联 Peer 所关联的 MSP 的 ID,一般为组织单位名称,需要与联盟配置中的名称一致。
五、总结
本文
介绍了 MSP 的基本概念:
- 它是 Fabric 网络中的一个逻辑组件。它是在证书,成员,联盟,签名等基础概念之上,抽象出来的。
介绍了 MSP 的作用:
- 在 Fabric 网络中,提供用户管理与权限验证的功能。
介绍了 MSP 的基本结构,也就是实现用户管理与权限验证,需要哪些信息才能提供保障。
包括:
- 根证书列表、组织单元列表、管理员身份证书、撤销证书列表、私钥库、TLS 根证书列表、TLS 中间证书等等。
介绍了实现 MSP 的基本步骤
- 生成 MSP 证书和它们的签名匙
- 配置 PEER 和 Orderer
- 配置 Channel
由此,关于 MSP,我们也有了一个较为宏观的认识。
参考资料:
Hyperledger 系列(十) Fabric MSP 和 Fabric CA 的区别
《区块链原理、设计与应用》-杨保华-陈昌-12.4 节-权限管理与策略
转自知乎 苏小乐 :https://www.zhihu.com/people/shan-de-ding-zhu/activities