fabric MSP功能及源码分析
- MSP是Membership Service Provider的缩写,直译为成员关系服务提供者。
- MSP作用就是负责区块链网络中对身份的管理和验证,在区块链网络中实现权限管理,包括下发、吊销及验证功能。
- MSP是一个提供抽象化成员操作框架的组件,CA是MSP的具体实现。
msp常见结构
- 以下是一个MSP结构中常见的组成部分:
1 | · 一组信任的根证书,是整个组织证书信任的基础,根证书可以签发中间层证书; |
- 图片来自官网
1 | Root CAs | 根证书列表 |
MSP实践操作
- MSP在Fabric中的作用是对用户进行管理,实践的基本步骤:
1 | 第一,生成MSP相关的证书和签名。 |
- 实际操作中
1 | 1. 编写crypto-config.yaml配置文件指定网络的拓扑结构和组织结构。 |
用cryptogen工具来生成的MSP需要用到的证书和相关文件。
- 主要包括各种证书和相关的签名。
1 | org1.example.com/ |
msp的作用域分类
MSP出现在区块链网络中的两个地方:Channel配置(Channel MSP),以及本地(local MSP)。因此,MSP可以分为:local 和 channel MSPs
localMSP
localMSP,是为节点(peer 或 orderer)和用户(使用CLI或使用SDK的客户端应用程序的管理员)定义的。每个节点和用户都必须定义一个localMSP,以便在加入区块链的时候,进行权限验证。channelMSP(globalMSP)
channel MSP在channel层面定义管理和参与权。参与Channel的每个组织,都必须为其定义MSP。Channel上的Peers 和 orderers将在Channel MSP上共享数据,并且此后将能够正确认证Channel参与者。这意味着如果一个组织希望加入该Channel,那么需要在Channel配置中,加入一个包含该组织成员的信任链的MSP。否则来自该组织身份的交易将被拒绝。
MSP功能分类
- Network MSP
通过定义参与者组织MSPs,来定义网络中的成员。同时定义这些成员中哪些成员,有权执行管理任务(例如,创建Channel) - Channel MSP
Channel提供了一组特定的组织之间的私人通信,这些组织又对其进行管理控制。在该Channel的MSP上下文中的Channel policies定义谁能够参与Channel上的某些操作,例如添加组织或实例化chaincodes。 - Peer MSP
此Local MSP在每个peer的文件系统上定义,并且每个peer都有一个MSP实例。从概念上讲,它执行的功能与Channel MSP完全相同,限制条件是它仅用于定义它的peer上。 - Orderer MSP
与peer MSP一样,orderer local MSP也在节点的文件系统上定义,并且仅用于该节点。与peer 节点相似,orderer也由单个组织拥有,因此只有一个MSP来列出其信任的参与者或节点。
msp与组织的对应关系
1,组织与MSP之间建立映射关系
建议实际的组织和MSP之间建立一一对应关系。当然也可以选择其他类型的映射关系
一个组织对应多个MSP的情况
这种情况是一个组织有多个部门,从方便管理的角度或者隐私保护的角度而言,每个部门都要设置不同的MSP。每个Peer节点只设置一个MSP,同一组织内不同MSP的Peer节点之间不能互相认证,这样相同组织的不同部门之间不会同步数据,数据不能共享。多个组织对应一个MSP
这种情况是同一个联盟的不同组织之间采用相同的成员管理架构,数据会在不同组织之间同步。在Peer节点之间的Gossip通信中,数据是在相同通道配置了相同MSP的Peer节点之间同步的。如果多个组织对应一个MSP,则数据就不会限制在组织内部,会跨组织进行同步。这种情况我觉得很有应用场景。比如,C9联盟可以在同一个MSP管理下,既能够确保信任的基础,又能够实现数据的共享。
其实这是由MSP定义的粒度问题,一个MSP可以和一个组织对应,也可以和多个组织对应,还可以和一个组织内部的多个部门对应,根据MSP配置好Peer节点后,数据同步就限制在了MSP定义的范围内。
2,一个组织内部实现不同的权限控制
给组织内的所有部门定义一个MSP
给Peer节点配置MSP的时候,包含相同的可信根CA证书列表、中间CA证书、管理员证书,不同的Peer节点设置不同的所属部门。节点所属的部门是利用证书和部门之间映射的OrganizationalUnitIdentifiers定义的,它包含在MSP目录下配置文件“config.yaml”中。按照基于部门验证的方法来定义交易背书策略和通道管理策略,这样就可以实现不同的权限控制了。
这种方法会有一个问题
数据实际还是会在不同的Peer节点之间同步。因为Peer节点在识别组织身份类型OrgIdentityType的时候获取的是MSP标识,它会认为通道内相同MSP的节点都是可以分发数据的。给组织内的每个部门单独定义MSP
给Peer节点配置MSP的时候,不同部门配置的可信中间CA证书、管理员证书可以是不同的,不同部门成员的证书路径也是不同的。这种方式解决了所有部门定义在一个MSP中的问题,但是会带来管理上的复杂度。
MSP相关核心源码
- MSP源码部分位于fabric下的msp目录
1 | msp |
分析
- 有时间在总结