ChainDesk:深入MSP成员管理与Fabric CA服务实现-走进MSP

目标
MSP 概念及作用

MSP 的组成结构

MSP 在 Hyperledger Fabric 中的应用

任务实现
数据隐私及安全是区块链技术中的的重要组成部分,联盟链中由多个不同的组织组成,且每一个组织又可以由多个节点组成,那么在 Hyperledger Fabric 中使用了什么且如何确保数据隐私及安全,在这一章中我们来认识一下相关的重要内容。

6.1.1 MSP定义及作用

在 Hyperledger Fabric 中,各个网络参与者之间的通信安全依赖于 PKI 标准来实现,并确保在区块链上发布的消息得到相应的认证。

PKI(Public Key Infrastructure):公钥基础结构。由向各方(如服务的用户,服务提供商)发布数字证书的证书颁发机构组成,然后他们使用它们在与其环境交换的消息中对自己进行身份验证。

PKI 有四个关键要素:

数字证书:包含与证书持有者相关的一组属性的文档。最常见的证书类型是符合X.509标准的证书,允许在其结构中编码一方的识别细节。

公钥和私钥:身份验证和消息完整性是安全通信中的重要概念。身份验证要求确保交换消息的各方创建特定消息的身份。对于具有“完整性”的消息意味着在其传输期间不能被修改。

证书颁发机构:证书颁发机构向不同的参与者分发证书,这些证书由CA进行数字签名。CA是为组织的参与者提供可验证的数字身份的基础。

证书撤销列表:某种原因而被撤销的证书的引用列表。

PKI 只是一个体系结构,负责生成及颁发;在 Hyperledger Fabric 中的默认 MSP 实际上是使用符合 X.509 标准的证书作为身份,采用传统的公钥基础结构(PKI)分层模型来实现。

MSP(Membership Service Provider):成员服务提供商,是 Hyperledger Fabric 1.0版本开始抽象出来的一个模块化组件。用于定义身份验证,进行身份验证和允许访问网络的规则。更确切地说,MSP 是 Hyperledger Fabric 对网络中的组成成员进行身份管理与验证的模块组件。

具体作用如下:

MSP 管理用户 ID。

验证想要加入网络的节点:每一个想加入网络中的节点必须提供其有效且合法的 MSP 信息。

为客户发起的交易提供凭证:在各节点(Client、Peer、Orderer)之间进行数据传输时,需要验证各节点的签名。

MSP 在 Hyperledger Fabric 中的分类:

网络MSP:对整个 Hyperledger Fabric 网络中的成员进行管理;定义参与组织的 MSP ,以及组织成员中的哪些成员被授权执行管理任务(如创建通道)

通道MSP:对一个通道中的组织成员进行管理。通道在特定的一组组织之间提供私有通信。在该通道的 MSP 环境中通道策略定义了谁有权限参与通道上的某些行为(如添加组织或实例化链码)。

Peer MSP:本地 MSP 在每个 Peer 的文件系统上定义,并且每个 Peer 都有一个单独的 MSP 实例。执行与通道 MSP 完全相同的功能,其限制是它仅适用于定义它的 Peer。

Orderer MSP:与 Peer MSP 相同,Orderer 本地 MSP 也在其节点的文件系统上定义,仅适用于该节点。

User MSP: 每一个组织都可以拥有多个不同的用户,都在其 Organizations 节点的文件系统上定义,仅适用该组织(包括该组织下的所有 Peer 节点)。

6.1.2 MSP 的组成结构

MSP的逻辑结构如下所示(与实际的物理结构会有所不同):

区块链技术QQ交流群:263270946 掌握更多技术干货,关注微信公众号“ChainDesk”

如上图所示,MSP有九个元素。其中MSP名称是根文件夹名称,每个子文件夹代表MSP配置的不同元素:

根CA(Root CAs):文件夹中包含根CA(CA:Certificate Authorities)的自签名 X.509 证书列表。用于自签名及给中间 CA 证书签名。

中间CA(ICA):包含由根据 CA 颁发的证书列表。

组织单位(OUs):这些单位列在 $FABRIC_CFG_PATH/msp/config.yaml 文件中,包含一个组织单位列表,其成员被视为该MSP所代表的组织的一部分。

管理员(B):此文件夹包含一个标识列表,用于定义具有此组织管理员角色的角色。对于标准MSP 类型,此列表中应该有一个或多个 X.509 证书。

需要注意,仅仅一个具有管理员的角色,并不意味着他们可以管理特定的资源,给定标识在管理系统方面的实际功能由管理系统资源的策略决定。

撤销证书(ReCA):保存已被撤销参与者身份的信息。

签名证书(SCA):背书节点在交易提案响应中的签名证书。此文件夹对于本地 MSP 是必需的,并且该节点必须只有一个 X.509 证书。

私钥(KeyStore):此文件夹是为 Peer 或 Orderer 节点(或客户端的本地MSP)的本地MSP定义的,并包含节点的签名密钥。此密钥以加密方式匹配 SCA 文件夹中包含的签名证书,并用于签署数据(如签署交易提议响应,作为认可阶段的一部分)。此文件夹对于本地MSP是必需的,并且必须只包含一个私钥。

TLS根CA(TLS RCA):包含组织信任的用于 TLS 通信的根 CA 的自签名 X.509 证书列表。此文件夹中必须至少有一个 TLS 根 CA X.509 证书。

TLS中间CA(TLS ICA):保存由 TLS 根 CA 颁发的中间证书列表。

 

6.1.3 MSP应用

要想初始化一个MSP实例,每一个peer节点和orderer节点都需要在本地指定其配置并启动。

首先, 为了方便地在网络中引用MSP,每个MSP都需要一个特定的名字(如 OrdererMSP、Org1MSP 或 Org2MSP.domain.com)。此名字被称之为 MSP 标识符或 MSP ID。对于每个 MSP 实例来说,MSP 标识符都必须独一无二。

在系统起始阶段,需要指定在网络中出现的所有 MSP 的验证参数,且这些参数需要在系统通道的创世区块中指定。MSP的验证参数包括MSP标识符、信任源证书、中间 CA 和管理员的证书,以及 OU 说明和 CLR。系统的创世区块会在 orderer 节点设置阶段被提供给它们,且允许它们批准创建通道的请求。如果创世区块包含两个有相同标识符的 MSP,那么 orderer 节点将拒绝系统创世区块,导致网络引导程序执行失败。

要想生成 X.509 证书以满足 MSP 配置,应用程序可以有多种方式实现:

使用Openssl。在此需要注意:在 Hyperledger Fabric 中,不支持包括RSA密钥在内的证书。

使用 cryptogen 工具,其操作方法参见第三章 3.1 生成组织结构与身份证书 一节 。

Hyperledger Fabric CA 也可用于生成配置 MSP 所需的密钥及证书。详见下节内容。

在节点的配置文件中(对 peer 节点而言配置文件是 core.yaml 文件,对 orderer 节点而言则是orderer.yaml文件。在实际开发中可自定义配置文件名称),我们需要指定到 mspconfig 文件夹的路径,以及节点的 MSP 的 MSP 标识符。节点的 MSP 的 MSP 标识符则会作为参数 localMspId 和 LocalMSPID 的值分别提供给 peer 节点和 orderer 节点。

运行环境可以通过为 peer 使用 CORE 前缀(如 CORE_PEER_LOCALMSPID)及为 orderer 使用 ORDERER 前缀(例如 ORDERER_GENERAL_LOCALMSPID)对以上变量进行重写。如在 fabric-samples 中提供的示例配置文件 docker-compose-base.yaml:

区块链技术QQ交流群:263270946 掌握更多技术干货,关注微信公众号“ChainDesk”

FAQ
MSP 是如何实现对身份的验证?

身份验证过程:

首先,使用证书颁发机构对用户身份进行验证。证书颁发机构标识应用程序、Peer 和 Orderer 标识,并验证这些凭据。通过使用签名算法和签名验证算法生成签名。具体地,生成签名以签名算法开始,签名算法利用与其各自身份相关联的实体的凭证,并输出认可。生成签名,该签名是绑定到特定标识的字节数组。

接下来,签名验证算法将身份,认可和签名作为输入,如果签名字节数组与输入的认可的有效签名相对应,则输出 'accept',否则输出 'reject'。如果输出是 'accept',则用户可以看到网络中的事务并与网络中的其他参与者执行事务。如果输出为 'reject',则表示用户未经过身份验证,并且无法向网络提交事务或查看任何的事务。
————————————————
版权声明:本文为CSDN博主「愿码」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43970764/article/details/85342708

热门文章

暂无图片
编程学习 ·

window.performance.navigation.type

performance.navigation.type(该属性返回一个整数值,表示网页的加载来源,可能有以下4种情况):0:网页通过点击链接、地址栏输入、表单提交、脚本操作等方式加载,相当于常数performance.navigation.TYPE_NAVIGATE。1:网页通过“重新加载”按钮或者location.reload()方法加…
暂无图片
编程学习 ·

IO基础篇:自动关闭接口AutoCloseable

介绍 在没有AutoCloseable之前,我调用资源对象,调用完毕后,必须要关闭,否则可能出现资源耗尽的情况 从名字就可以看出,AutoCloseable是一个可以自动保存资源并且关闭资源对象的接口,那么实现它的类就可以自动关闭资源,那怎样自动关闭呢?我们可以看下面例子: 例子 publ…
暂无图片
编程学习 ·

功能测试框架

功能测试框架可以包括:界面友好性测试、功能测试、链接测试、容错测试、稳定性测试、常规性能测试、配置测试、算法测试等等。1.1.1 界面友好性测试风格、样式、颜色是否协调界面布局是否整齐、协调(保证全部显示出来的,尽量不要使用滚动条界面操作、标题描述是否恰当(描述…
暂无图片
编程学习 ·

【阿里云】学生成长计划领取资格考试答案分享

云计算及云服务器入门 刚刚尝试了阿里云的高校学生计划,完成身份和学生认证后出现了需要测试才能领取,没想到凭感觉还拿到了90分,科一科四都能过了哈哈,下面是分享,希望后半年能把这种好资源利用起来,真正学点吃饭的东西,正确答案加粗显示。 选择题单选 1.SQL语言的功能…
暂无图片
编程学习 ·

Struts2环境搭建及其复现

什么是Struts框架 Struts2 是目前较为普及和成熟的基于MVC设计模式的web应用程序框架,它不仅仅是Struts1 的升级版本,更是一个全新的Struts架构。最初,是以WebWork框架和Struts框架为基础,通过提供增强和改进的Struts框架,进而实现简化web技术人员开发工作的目标。不久之后…
暂无图片
编程学习 ·

Vue之处理边界情况

处理边界情况All the features on this page document the handling of edge cases,meaning unusual situations that sometimes require bending Vue’s rules a little. Note however, that they all have disadvantages or situations where they could be dangerous.特殊情…
暂无图片
编程学习 ·

前端面试题及答案.全全全!!!---js

HTML——CSS——JS——es6——Vue——微信小程序-----------服务器----------nodeJS面试题1.基本数据类型有哪几种?undefined,null,boolean,string,number,Symbol(es6)2.引用数据类型有哪些?Object,Array3.JavaScript的typeof返回的数据类型?string number array object fun…
暂无图片
编程学习 ·

Spring-boot 使用undertow代替tomcat

Undertow是Red Hat公司的开源产品, 是一款灵活的高性能Web服务器,它完全采用Java语言开发,可以直接嵌入到Java项目中使用,支持阻塞IO和非阻塞IO。由于Undertow采用Java语言开发。 Undertow在高并发业务场景中,性能优于Tomcat,对于并发要求不高的情况下,二者差别不大。 Un…
暂无图片
编程学习 ·

App测试中IOS和安卓测试的区别

一、分辨率的测试 安卓端有20多种,IOS相对就比较少一些 二、操作系统的版本 安卓的操作系统比较多,IOS比较少,而且它只能支持单项升级,不能支持降级。 三、操作习惯的一些不同 安卓习惯点击BACK键,所以我们要测试一下BACK键,看看BACK键是否被重写了。点击BACK键之后,看看…
暂无图片
编程学习 ·

React基本使用 - props与state、React事件

1、props 父组件传过来的参数 可以使用组件类的defaultProps属性,设置默认的props值 // Actor.js import React,{Component} from react; export default class Actor extends Component{render(){return (<div>hi, {this.props.name} - {this.props.works}</div>…
暂无图片
编程学习 ·

python学习(一)

编写比较通用的一个可以画出像图4中那样花朵的函数集。import math import turtle def polyline(t, n, length, angle):"""Draws n line segments.t: Turtle objectn: number of line segmentslength: length of each segmentangle: degrees between segments&q…
暂无图片
编程学习 ·

jsoncpp的安装与配置

某些项目需要jsoncpp库,那么本文将介绍Ubuntu下安装jsoncpp库具体步骤。安装jsoncpp前必须安装scons。1.scons下载地址:https://sourceforge.net/projects/scons 可以选择对应的版本下载2.jsoncpp下载地址:http://sourceforge.net/projects/jsoncpp/files/3.解压scons-3.1.2…
暂无图片
编程学习 ·

【Docker】 Docker pull的时候指定仓库

1.概述 默认情况下docker pull会从docker hub拉取镜像文件,也可以手动指定一个仓库地址拉取镜像。假如你设置了一个本地仓库地址,那么你只要指定这个地址拉取镜像即可。仓库地址类似一个URL,但是没有协议头http://。 例如从一个镜像地址:myregistry.local:5000,拉取镜像文…
暂无图片
编程学习 ·

JavaScript从入门到精通复习资料大全(基础知识篇)

JavaScript从入门到精通复习一、JavaScript中的常量和变量1、常量:就是程序运行过程中,保持不变的数据。2、变量:是程序中一个已经命名的存储单元。3、 变量的赋值二:JavaScript中的运算符1、算术运算符2、比较运算符3、赋值运算符4、字符串运算符5、 逻辑运算符6、条件运…
暂无图片
编程学习 ·

HTML概述

HTML发展史HTML没有1.0,因为关于它的初版存在争议,1995年HTML 2.0面世,1997年由国际官方组织W3C推出了HTML 3.2以及HTML 4.0标准,后面W3C(万维网联盟)也渐渐变成Web技术领域的权威,经过漫长的演变,2014年,HTML 5标准最终面世。HTML 2.0——1995年11月,RFC 1866发布HTML…
暂无图片
编程学习 ·

java核心小知识课堂 (一)【持续更新......】

1、Java 7 语言的特点: 面向对象性 健壮性 跨平台性 2、一个“.java”源文件中可以包括多个类(不是内部类),但是,最多只能有一个类名声明为public,与文件名相同。 3、设置path的目的是什么? 答:目的是为了在控制台的任何文件路径下,都可以调用jbk指定目录下的所有指令…
暂无图片
编程学习 ·

jxl.jar下载

jxl.jar给java提供了简单操作Excel的方法:链接:https://pan.baidu.com/s/17HXj_w8E2nM8iIssf2Bmhg 提取码:l6t5