Fabric v1.x MSP的结构和使用方法

一、MSP是什么

1.1 相关概念

证书:
证书是fabric权限管理的基础,采用ecdsa算法,符合X.509标准,通过CA来签发证书,每个identity或organization都可以拥有自己的身份证书。
组织:
证书遵循组织结构,通过组织实现灵活的权限管理,组织一般包含名称、ID、MSP、管理策略、anchor peer节点位置信息。
成员:
peer和client都是成员,peer提供节点服务,在跟不同组织交互的时候,同一个组织的成员节点一般被认为是同一个身份,然后代表组织进行签名。
联盟:
由多个组织组成,在联盟中,每个组织都要有自己的MSP ID

1.2 MSP(Membership Service Provider)

MSP(Membership Service Provider)是从一个从fabric CA里enroll的一个identity实体到一个organization的映射,确定如何将一个节点分配一个特定角色,并且获得适当的访问权限,抽象了颁发和验证证书(MSP向clients提供认证交易的凭证,以及向peers提供背书的凭证),以及身份验证背后的加密机制和协议。MSP是可插拔的接口,一个MSP是可以通过管理员的配置来更换或插拔,可以定义一些验证和签名的规则。Fabric可由多个MSP管理,提供模块化的成员操作,保证不同成员标准和结构的互操作性。但是同一个channel上MSP ID必须是唯一的,如果有两个相同的启动会失败。

1.3 MSP的验证元素

MSP的验证元素包括:

  • MSP Identifier
  • Root CAs
  • Intermediate CAs
  • Admin CAs
  • OU List
  • CRLs

二、MSP的结构

Fabric需要在每个peer、orderer、channel上指定MSP,启用这些节点的身份验证、签名验证的功能。

MSP的参数来自于RFC5280,包括:

  • 自签名的X.509证书列表构成信任根,以及TLS证书的TLS信任根
  • X.509证书列表,需要带有可验证的证书路径,以表示管理员的MSP,并有权请求对此MSP的配置进行更改(例如Root CA、intermediate CA)
  • 中间证书由信任根中的其中一个证书精确认证
  • OU列表
  • CRL

MSP的身份合法条件:

  • 符合X.509证书标准,提供可验证的证书
  • MSP不能包含在任何CRL中
  • 在其X.509证书结构的OU字段中可以设置一个或多个MSP的OU(组织单元)

MSP文件树如下:
在这里插入图片描述
Root CAs、Intermediate CAs是签发证书的CA的证书;
Organizational Units是可选的,默认不会生成,需要在msp目录下的config.yaml文件里定义organization;
Revoked Certificates、Administrators、TLS Root CAs、TLS Intermediate CAs同样是可选的;
Signing Certificates是节点本身的证书;
Keystore就是私钥,用于签名;

组织与MSP的映射关系
一般是在定义好了组织结构之后,再来命名MSP,这样就是比较节省资源。
一个organization可以不同的department,具有不同的功能和职责,可能在区块链网络里是属于不同channel的,一般需要建立多个MSP,来划分组织权限结构。
在这里插入图片描述
MSP在channel上的定义

  • Local MSP:对应的是peer节点,在节点中给对应组织生成MSP。主要用来管理peer节点、orderer节点;
  • Global MSP(Channel MSP):channel里所有organization共享的MSP集合 ,会把所有配置拷贝到Peer节点。主要用来管理channel资源、账本、智能合约等。
    在这里插入图片描述

MSP的层级
MSP必须指定在某个层级上,这是由于channel MSP和Local MSP的分割造成的,用来管理组织和本地资源,层级从高到底有网络层、channel的Global MSP、Peer节点、orderer节点。层级化的MSP要求最好事先做好organization的设置。
在这里插入图片描述
Peer和Orderer的MSP配置
Peer和Orderer的MSP配置基本是一样的,示例如下:

# Path on the file system where peer will find MSP local configurations
    mspConfigPath: msp

    # Identifier of the local MSP
    # ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!----
    # Deployers need to change the value of the localMspId string.
    # In particular, the name of the local MSP ID of a peer needs
    # to match the name of one of the MSPs in each of the channel
    # that this peer is a member of. Otherwise this peer's messages
    # will not be identified as valid by other nodes.
    localMspId: SampleOrg
# Type for the local MSP - by default it's of type bccsp
    localMspType: bccsp

MSP的生命周期
用Fabric CA Client做enroll的时候,就会自动生成一个MSP的目录结构,也就是生成了一个MSP;

  • 对于X.509的CRL:MSP的信息如果被加到CRL中,用户在做验证的时候会检查CRL,如果验证的这个人在黑名单里,就不应该有任何权限了;
  • Idemix CRL:新的revoke功能,还没实现完成。

三、MSP实践

推荐一个组织对应一个MSP,逻辑非常清晰,实际中也可以1个组织对应多个MSP,或多个组织对应一个MSP。
授予不同部门访问不同channel的不同访问权限;
需要将管理者Admin的证书和CA证书分开;
可以把某个被攻击的中间CA加到黑名单,这样该CA颁发的所有证书都会失效;
推荐把CA和TLS CA负责各自的功能,不要放在一起。

四、TLS通信的证书

channel上节点间通信都是基于TLS的,以保证数据安全和可信性。

  • 单向(只有服务器)
  • 双向(服务器-客户端)

Peer节点既是TLS服务器又是TLS客户端

  • TLS server:其他peer节点、application、客户端都会连接它
  • TLS client:连接其他peer节点或orderer

TLS client的身份验证默认是关闭的,如果需要双边通信则要启用该功能。
在channel里,channel成员的root CA证书链是从config区块里读取的,然后添加到TLS客户端和服务器的Root CAs的数据结构。因此,peer与peer、peer与orderer之间的通信是无缝的。

TLS通信的握手过程如下图所示:
在这里插入图片描述

发布了38 篇原创文章 · 获赞 3 · 访问量 6930

猜你喜欢

转载自blog.csdn.net/ice_fire_x/article/details/104628346
今日推荐