版权声明:本文为博主原创文章,欢迎转载;转载请注明来自 瓜哥:D:http://www.jianshu.com/p/980c3ce928dc
MSP 是 Hyperledger Fabric 项目里面比较抽象,难以理解的部分。而这篇文档是1.0里面唯一对于 MSP 服务有详细说明的部分,但是里面的文字又写得很拗口难以理解。我试着把它翻译出来,希望能够帮助到看到的各位同行~
同样感谢我队里的小伙伴 九歌 对这篇文档翻译的贡献,他负责了这文章的部分翻译。
Membership Service Providers (MSP)
这个文档用于提供建立 MSP 以及 MSP 最佳实践的细节
Membership service provider (MSP)是一个组件,其目标是提供一个成员操作体系的抽象。
特别地,MSP 抽象了所有分发和验证证书、用户授权工作背后的密码机制和协议。一个MSP可能会定义他们自己的身份概念,同时也会定义一些规则,通过这些规则MSP可以实现身份管理(身份确认)和身份证明的功能。
一个 Hyperledger Fabric 的网络能够被一个或者多个 MSP 管理。这样就能够提供成员操作的模块化特性以及在不同的成员标准和体系之间的协作性。
在接下来的文件中我们会详细讲述 MSP 建立,MSP 的运行实际上由 Hyperledger Fabric 做支持。接着会讨论一个 MSP 的最佳实践。
MSP Configuration (MSP配置)
为了实例化一个 MSP,它的部署必须被精确到每一个 peer 和 orderer 节点本地上(为了使得peer和orderer的签名生效)。同时它也要被部署到 channel 上使得对于所有的channel成员来说 peer,orderer 和client的身份确认、各自的签名确认(授权)都可以生效。
首先,对于每一个 MSP,为了在网络中用到它,MSP都必须要有一个名字(例如说 msp1,org2 和 org3.divA)。在这些名字下MSP的成员规则代表了一个组合体,组织和组织部门,而这些名字这回在channel中被用到。也可以把他们叫做 MSP 身份或者 MSP ID。每一个 MSP 实例都只能拥有一个 MSP 身份。例如,假设两个 MSP 实例在系统 channel 中被发现有同样的身份,那么不管是 genesis 还是 orderer 的建立都会失败。
在MSP的默认运行例子中,为了让身份确认和签名核实成功,一系列的MSP的参数都要被确认。这些参数是由RFC5280所指明的, 并且包括:
- A list of self-signed (X.509) certificates to constitute the root of trust
- A list of X.509 certificates to represent intermediate CAs this provider considers for certificate validation; these certificates ought to be certified by exactly one of the certificates in the root of trust; intermediate CAs are optional parameters
- A list of X.509 certificates with a verifiable certificate path to exactly one of the certificates of the root of trust to represent the administrators of this MSP; owners of these certificates are authorized to request changes to this MSP configuration (e.g. root CAs, intermediate CAs)
- A list of Organizational Units that valid members of this MSP should include in their X.509 certificate; this is an optional configuration parameter, used when, e.g., multiple organisations leverage the same root of trust, and intermediate CAs, and have reserved an OU field for their members
- A list of certificate revocation lists (CRLs) each corresponding to exactly one of the listed (intermediate or root) MSP Certificate Authorities; this is an optional parameter
- A list of self-signed (X.509) certificates to constitute the TLS root of trust for TLS certificate.
- A list of X.509 certificates to represent intermediate TLS CAs this provider considers; these certificates ought to be certified by exactly one of the certificates in the TLS root of trust; intermediate CAs are optional parameters.
接下来的几个情况中,这个 MSP 实例都要满足拥有有效的的身份的条件。
- 他们持有 X.509 证书,同时有能证实的,通向唯一的信任证书根目录的路径
- 他们没有被包含在任何的CRL中
- 他们在 OU 中列出一个或多个 MSP 部署的组织单元的 X.509 证书结构
获取更多在现有的MSP执行中身份确认的信息请点击
MSP Identity Validity Rules
除了相关参数的核实,为了让MSP能启动它自己实例化签名和授权过的节点,还有下面的这些需要确认
- 节点用来签名的 key(现在只有 ECDSA key 被支持)
- 节点的 X.509 证书,这是在这个 MSP 的验证参数下有效的身份
有一个重要的点需要注意,就是 MSP 的身份永远都不会失效;只把他们加入到合适的 CRLs 能够把这些身份合法地取消。另外,现在还没有对强制取消TLS证书的操作作支持。
How to generate MSP certificates and their signing keys?(如何生成 MSP 证书和签名钥匙?)
为了满足 MSP 的配置,应用可以使用 Openssl 来生成 X.509 证书。 我们强调在 Hyperledger Fabric 没有对证书包括 RSA key 作任何支持。
任意一个人可以使用 cryptogen 工具,它的使用在Getting Started中已经被解释过。
Hyperledger Fabric CA 同样可以被用到生成用来配置一个MSP的 key 和证书。
MSP setup on the peer & orderer side(在 peer&orderer 一边建立 MSP)
建立区域 MSP(peer端或者orderer端),管理员需要创建一个文件夹(例如——$MY_PATH/mspconfig),这个文件夹下有六个子文件夹和一个文件:
- 文件夹 admincerts 用来包含 PEM 文件,每个 PEM 文件会被绑定到一个管理员证书上。
- 文件夹 cacerts 用来包含 PEM 文件, 每个 PEM 文件都会被绑定到 CA 的根证书上。
- (可选)文件夹 intermediatecerts 用来包含 PEM 文件,每个 PEM 文件都绑定到一个 intermediate CA 证书上。
- (可选)一个文件 config.yaml 用来包含已经考虑过的 OU 的信息;他们会在之后被定义为一组在被称为 OrganizationalUnitIdentifiers 的yaml数组中的实体,也即 <Certificate, OrganizationalUnitIdentifier>,其中的 Certificate 代表着到证书机构的证书(root 的或者 intermediate 的)的相对路径。这些证书是被认为是组织单元(organizational unit 也就是 OU)中的已证明成员说拥有的。而 *OrganizationalUnitIdentifier * 代表着理应在 X.509 证书中的 OU-field 中出现的实际字符串。
- (可选)一个文件夹,用来包括CRL。
- 文件夹 keystore 用来包含一个 PEM 文件,这个 PEM 文件附带有节点的签名 key;我们再次强调我们不支持 RSA key。 =。=
- 文件夹 signcerts 用来包含 PEM 文件, 这个 PEM 文件包含节点的 X.509 证书。
- (可选)文件夹 tlscacerts 用来包含 PEM 文件, 这些 PEM 文件被绑定在 TLS CA 的 根证书上。
- (可选)文件夹 tlsintermediatecerts 用来包含 PEM 文件,这些 PEM 文件绑定在 intermediate TLS CA 的证书上。
在节点的配置文件(peer 是 core.yaml,orderer 是 orderer.yaml)中,到mspconfig的文件夹的路径和节点的 MSP 身份需要被确认。这个路径应该是 FABRIC_CFG_PATH 相关的,并且应该为 peer 提供参数 mspConfigPath 的值,为 orderer 提供 LocalMSPDir 的值。节点的 MSP 身份就是:peer——参数 localMspId 的值,orderer——参数LocalMSPID的值。这些变量可以被覆盖,通过在环境中用 peer 或者 orderer 的 CORE 前缀和 ORDERER 前缀。注意到对于orderer的建立,orderer需要已经生成好的系统 channel 的 genesis block。 在这个 block 中 MSP 配置的需求细节将在下一节讲到。