Hyperledger Fabric 专题

3. Hyperledger Fabric 专题 - MSP

2019-11-07  本文已影响0人  furnace

Hyperledger Fabric 专题 - MSP

如果你通读了有关 身份标识 的文档,你将了解 PKI 如何通过信任链提供可验证的身份。现在,让我们看看如何使用这些身份标识来表示区块链网络的受信任成员。

这就是成员资格服务提供商 (Membership Service Provider, MSP) 发挥作用的地方 - 它通过列出其成员的身份或通过标识哪些 CA 具有权限为其成员发布有效身份,或者 (通常是这样) 通过将两者结合使用,来确定哪些根 CA 和中间 CA 是可信的并且可以定义可信域 (例如组织) 的成员。

MSP 的功能不仅限于列出谁是网络参与者或通道 (channel) 成员。MSP 可以识别参与者可能在 MSP 代表的组织范围内扮演的特定角色 (例如,管理员或作为子组织组的成员),并作为基础以在网络和通道上下文中定义访问权限 (例如,通道管理者,读取者,写入者)。

将 MSP 的配置发布到相应组织成员参与的所有通道 (以通道 MSP 的形式)。除了通道 MSP 外,对端节点,交易排序器和客户端还维护本地 MSP,以在通道上下文之外对成员消息进行身份验证,并定义对特定组件的许可权限 (例如,该组件可以在对端节点上安装链码)。

另外,如 身份标识 文档中所讨论的,MSP 可以识别已吊销的身份标识列表,但是我们将讨论该过程如何扩展到 MSP。

我们将马上进行关于通道和本地 MSP 的更多讨论。不过,现在让我们先看看 MSP 的一般功能。

1. 将 MSP 映射到组织

组织由一组受管理的成员构成。它可以像跨国公司一样大,也可以像花店一样小。对于组织而言,最重要的是,他们在单个 MSP 下管理成员。请注意,这与 X.509 证书中定义的组织概念不同,我们稍后将讨论。

由于组织与其 MSP 之间的排他关系,因此以组织名称命名 MSP 是很合理的,这是大多数策略配置中都会采用的约定。例如,组织 ORG1 可能有一个称为 ORG1-MSP 之类的MSP。在某些情况下,组织可能需要多个成员资格组 - 例如,在组织之间使用通道执行非常不同的业务功能的情况下。在这些情况下,一个组织拥有多个 MSP 并相应地命名它们是有意义的,例如 ORG2-MSP-NATIONAL 和 ORG2-MSP-GOVERNMENT,这反映了与政府监管通道相比,ORA2 在 NATIONAL 销售通道中信任不同的成员资格根源。

image

上图显示了一个组织两种不同的 MSP 配置。第一个配置显示了 MSP 与组织之间的典型关系 - 单个 MSP 定义组织的成员列表。在第二种配置中,使用不同的 MSP 代表具有国家、国际、和政府从属关系的不同组织组。

2. 组织单位和 MSP

一个组织通常划分成多个组织单位 (OU),每个组织单位都有一定的职责集。例如,组织 ORG1 可能同时具有 ORG1-MANUFACTURING 和 ORG1-DISTRIBUTION OU,以反映这些单独的业务线。当 CA 颁发 X.509 证书时,证书中的 OU 字段会指定身份所属的业务范围。

稍后我们将看到 OU 如何帮助控制将组织中的哪些部分视为区块链网络的成员。例如,只有来自 ORG1-MANUFACTURING OU 的身份标识才可以访问通道,而 ORG1-DISTRIBUTION 则不能。

最后,尽管这是对 OU 的轻微滥用,但是有时联盟中的不同组织可以使用它们来区分彼此。在这种情况下,不同的组织将相同的根 CA 和中间层 CA 用于其信任链,但会分配 OU 字段以标识每个组织的成员。稍后,我们还将介绍如何配置 MSP 来实现此目的。

3. 通道 MSP 和本地 MSP

MSP 出现在区块链网络中的两个位置:通道配置 (通道 MSP) 和角色所在位置的本地 (本地MSP)。本地 MSP 是为客户端 (用户) 和节点(对端节点和交易排序器)定义的。节点本地 MSP 定义了该节点的权限 (例如,对端节点的管理员是谁)。用户的本地 MSP 允许用户端在其交易中作为通道成员 (例如,在链码交易中) 或作为系统中特定角色的所有者 (例如,配置交易组织管理员) 进行身份验证。

每个节点和用户都必须定义一个本地 MSP,因为它定义了谁在该级别具有管理或参与权 (对端节点管理员不一定是通道管理员,反之亦然)。

相反,通道 MSP 在通道级别定义了管理权和参与权。每个参与通道的组织都必须为其定义通道 MSP。通道上的对端节点和交易排序器将共享相同的通道 MSP 视图,因此将能够正确地验证通道参与者。这意味着,如果组织希望加入通道,则需要在通道配置中包含一个包含组织成员信任链的 MSP。否则,来自该组织身份的交易将被拒绝。

本地 MSP 和通道 MSP 之间的主要区别不是它们的功能 (两者都将身份标识转变为角色),而是它们的范围。

image

上图显示了本地和通道 MSP。每个对端节点的信任域 (例如,组织) 由对端节点的本地 MSP (例如 ORG1 或 ORG2) 定义。通过将组织的 MSP 添加到通道配置中,可以实现在通道上代表组织。例如,此图的通道同时由 ORG1 和 ORG2 管理。类似的原理适用于网络,交易排序器和用户,但为简单起见,此处未显示。

你可能会发现,通过查看区块链管理员安装和实例化智能合约时会发生什么,了解使用本地和通道 MSP 很有帮助,如上图所示。

管理员 B 以 RCA1 发布的身份标识连接到对端节点,并存储在其本地 MSP 中。当 B 尝试在对端节点上安装智能合约时,对端节点会检查其本地 MSP ORG1-MSP,以验证 B 的身份确实是 ORG1 的成员。成功的验证将使安装命令成功完成。随后,B 希望在通道上实例化智能合约。因为这是通道操作,所以通道上的所有组织都必须对此表示同意。因此,对端节点必须先检查通道的 MSP,然后才能成功提交此命令。(其他事情也必须发生,但目前就集中在上面提到的内容。)

本地 MSP 仅在它们应用到的节点或用户的文件系统上定义。因此,在物理上和逻辑上,每个节点或用户只有一个本地 MSP。但是,由于通道 MSP 可用于通道中的所有节点,因此它们在通道配置中逻辑定义一次。但是,通道 MSP 也会在该通道中每个节点的文件系统上实例化,并通过共识保持同步。因此,尽管在每个节点的本地文件系统上都有每个通道 MSP 的副本,但从逻辑上讲,通道 MSP 驻留在通道或网络上并由通道或网络维护。

4. MSP 级别

MSP 划分为通道 MSP 和本地 MSP 反映了组织管理的需求,如管理本地资源 (例如对端节点或交易排序器节点),通道资源 (例如帐本,智能合约),和在通道或网络级别运行的联盟。可以将这些 MSP 划分为不同的级别,这会很有帮助,较高级别的 MSP 与网络管理相关,而较低级别的 MSP 处理身份管理的私有资源。 MSP 在每个管理级别都是必需的 - 必须为网络,通道,对端节点,交易排序器和用户定义 MSP。

image

上图显示了 MSP 级别。对端节点和交易排序器的 MSP 是本地的,而某个通道 (包括网络配置通道) 的 MSP 在该通道的所有参与者之间共享。在此图中,网络配置通道由 ORG1 管理,但另一个应用程序通道可以由 ORG1 和 ORG2 管理。对端节点是 ORG2 的成员并由其管理,而 ORG1 管理交易排序器。 ORG1 信任来自 RCA1 的身份,而 ORG2 信任来自 RCA2 的身份。请注意,这些是管理身份,反映了谁可以管理这些组件。因此,当 ORG1 管理网络时,ORG2.MSP 确实存在于网络定义中。

5. MSP 结构

到目前为止,你已经看到,MSP 的最重要元素是用于建立相应组织中参与者或节点成员身份的根或中间 CA 的规范。但是,还有更多元素与这两个元素结合使用以辅助成员资格功能。

image

上图显示了本地 MSP 如何存储在本地文件系统上。即使通道 MSP 的物理结构不是完全按照这种方式构成的,但仍是考虑它们的有用方法。

如你所见,MSP 有九个要素。在目录结构中最容易想到这些元素,其中 MSP 名称是根文件夹名称,每个子文件夹代表 MSP 配置的不同元素。

让我们更详细地描述这些文件夹,看看它们为什么很重要。

这是最重要的文件夹,因为它标识了必须从其派生所有其他证书才能被视为相应组织的成员的 CA。

中间层 CA 可能代表组织的不同部门 (例如 ORG1 的 ORG1-MANUFACTURING 和 ORG1-DISTRIBUTION 所做的事情),也可能代表组织本身 (如果商业 CA 用于组织的身份管理,则可能是这种情况)。在后一种情况下,中间层 CA 可以用来表示组织细分。在 这里,你可以找到有关 MSP 配置最佳实践的更多信息。请注意,可能有一个没有中间层 CA 的正常运行的网络,在这种情况下,此文件夹将为空。

与 “根 CA” 文件夹类似,此文件夹定义了必须颁发证书才能被视为组织成员的 CA。

指定 OU 是可选的。如果未列出任何 OU,则 MSP 一部分的所有身份 (由根 CA 和中间层 CA 文件夹标识) 将被视为组织的成员。

值得注意的是,仅仅因为参与者具有管理员角色,并不意味着他们可以管理特定资源!给定身份在管理系统方面的实际能力由管理系统资源的策略确定。例如,通道策略可能指定 ORG1-MANUFACTURING 管理员有权向该通道添加新组织,而 ORG1-DISTRIBUTION 管理员则无此权利。

即使 X.509 证书具有 ROLE 属性 (例如,指定参与者是管理员),也指的是参与者在其组织内而不是在区块链网络上的角色。这类似于 OU 属性的用途,如果已定义,则它是指参与者在组织中的位置。

如果已为该通道编写了策略,以允许组织 (或某些组织) 中的任何管理员执行某些通道功能 (例如实例化链码) 的权限,则可以使用 ROLE 属性在该通道级别授予管理权限。这样,组织角色可以赋予网络角色。

此列表在概念上与 CA 的证书吊销列表 (Certificate Revocation List, CRL) 相同,但也与组织的成员资格吊销有关。结果,MSP 的管理员 (本地或通道) 可以通过向 CA 的更新的 CRL 发布由其颁发的吊销证书来快速吊销组织中的参与者或节点。此“列表列表”是可选的。仅当证书被吊销时,它才会被填充。

对于本地 MSP,此文件夹是必需的,并且该节点必须完全有一个 X.509 证书。它不用于通道 MSP。

此文件夹对于本地 MSP 是必需的,并且必须仅包含一个私钥。显然,对此文件夹的访问必须仅限于对对端节点具有管理责任的用户的身份。

通道 MSP 的配置不包括此文件夹,因为通道 MSP 仅旨在提供身份验证功能而不是签名功能。

MSP TLS 信息与网络内部的节点有关 - 换句话说,对端节点和交易排序器,而不是消耗网络的应用程序和管理。

此文件夹中至少必须有一个 TLS 根 CA X.509 证书。

有关 TLS 的更多信息,请单击 此处

如果你已经阅读过本文档以及我们的有关 身份标识 的文档,那么你应该对身份标识和成员身份在 Hyperledger Fabric 中的工作方式有很好的了解。你已经了解了如何使用 PKI 和 MSP 来识别在区块链网络中进行协作的参与者。你已经了解了证书,公钥/私钥和信任根的工作原理,以及 MSP 的物理和逻辑结构。

Reference

  1. Docs » Key Concepts » Membershipm, https://hyperledger-fabric.readthedocs.io/en/release-1.4/membership/membership.html
  2. Docs » Key Concepts » Identity, https://hyperledger-fabric.readthedocs.io/en/release-1.4/identity/identity.html
  3. Docs » Operations Guides » Membership Service Providers (MSP), https://hyperledger-fabric.readthedocs.io/en/release-1.4/msp.html
  4. Docs » Operations Guides » Securing Communication With Transport Layer Security (TLS), https://hyperledger-fabric.readthedocs.io/en/release-1.4/enable_tls.html

项目源代码

项目源代码会逐步上传到 Github,地址为 https://github.com/windstamp

Contributor

  1. Windstamp, https://github.com/windstamp
上一篇 下一篇

猜你喜欢

热点阅读