Hyperledger MSP

Hyperledger MSP服务化

成员服务提供者(MSP,Member service provider)是一个提供抽象化成员操作框架的组件。MSP将颁发与校验证书,以及用户认证背后的所有密码学机制与协议都抽象了出来。一个MSP可以自己定义身份,以及身份的管理(身份验证)与认证(生成与验证签名)规则。一个Hyperledger Fabric 区块链网络可以被一个或者多个MSP管理,这提供了模块化的成员操作,以及兼容不同成员标准与架构互操作性。

MSP配置

要想初始化一个MSP实例,每一个peer节点和orderer节点都需要在本地指定其配置,并在channel上启用peer节点、orderer节点及client的身份的验证与各自的签名验证。注意channel上的全体成员均参与此过程。

每个MSP都需要一个特定的名字(例如msp1org2org3.divA

在MSP默认情况下,身份验证和签名需要指定一组参数,这些参数推到自RFC5280

  1. 一个自签名的证书列表(满足X.509标准)以构成信任源

  2. 一个用于表示该MSP验证过的中间CA的X.509的证书列表,用于证书的校验。这些证书应该被信任源的一个证书所认证;中间的CA则是可选参数

  3. 一个具有可验证路径的X.509证书列表(该路径通往信任源的一个证书),以表示该MSP的管理员。这些证书的所有者对MSP配置的更改要求都是经过授权的(例如根CA,中间CA)

  4. 一个证书吊销列表(CRLs)的清单,清单的每一项对应于一个已登记的(中间的或根)MSP证书颁发机构(CA)

  5. 一个自签名的证书列表(满足X.509标准)以构成TLS信任源,服务于TLS证书

  6. 一个表示该provider关注的中间TLS CA的X.509证书列表。这些证书应该被TLS信任源的一个证书所认证;中间的CA则是可选参数

对于MSP实例,有效的身份应该符合以下条件:

  1. 符合 X.509 证书标准,且具有一条可验证的路径(该路径通往信任源的一个证书)

  2. 没有保存在任何CRL中(证书吊销列表)

  3. 它们列出了一个或多个MSP配置的组织单元(列出的位置是它们X.509证书结构的OU区内)。

另外,MSP身份永远不会过期,他们只能通过添加到合适的CRL上来被撤销,此外,现阶段不支持吊销TLS证书。

如何生成MSP证书及其签名密钥

​ 要想生成X.509证书以满足MSP配置,应用程序可以使用Openssl。我们必须强调:在Hyperledger Fabric中,不支持包括RSA密钥在内的证书。或者直接使用Fabric提供的cryptogen工具来生成证书。Hyperledger Fabric CA也可用于生成配置MSP所需的密钥及证书。

peer&orderer侧 MSP 的设置

要想(为peer节点或orderer节点)建立本地MSP,管理员应创建一个文件夹(如$MY_PATH/mspconfig)并在其下包含6个子文件夹与一个文件:

必须包含的文件夹:

  1. admincerts 下的 PEM文件对应管理员证书

  2. cacerts对应于一个根CA的证书

  3. 文件夹keystore包含一个PEM文件及节点的签名密钥;我们必须强调:现阶段还不支持RSA密钥

  4. 文件夹signcerts包含一个PEM文件及节点的X.509证书

  5. (可选)文件夹intermediatecerts包含如下PEM文件:每个PEM文件对应于一个中间CA的证书

  6. (可选)文件config.yaml包含相关OU的信息;后者作为<Certificate,OrganizationalUnitIdentifier>(一个被称为OrganizationalUnitIdentifiers的yaml数组的项)的一部分被定义;其中Certificate表示通往(根或中间)CA的证书的相对路径,这些CA用于为组织成员发证(如./cacerts/cacert.pem);OrganizationalUnitIdentifier表示预期会出现在X.509证书中的实际字符串(如“COP”)

  7. (可选)文件夹tlsintermediatecerts包含如下PEM文件:每个PEM文件对应于一个中间TLS CA的证书

  8. (可选)文件夹tlscacerts包含如下PEM文件:每个PEM文件对应于一个根TLS根CA的证书

  9. (可选)文件夹crls包含相关CRL

对peer节点而言配置文件是core.yaml文件,对orderer节点而言则是orderer.yaml文件 我们需要指定到mspconfig文件夹的路径,以及节点的MSP的MSP标识符。到mspconfig文件夹的路径预期是一个对FABRIC_CFG_PATH的相对路径,且会作为参数mspConfigPathLocalMSPDir的值分别提供给peer节点和orderer节点。节点的MSP的MSP标识符则会作为参数localMspIdLocalMSPID的值分别提供给peer节点和orderer节点。运行环境可以通过为peer使用CORE前缀(例如CORE_PEER_LOCALMSPID)及为orderer使用ORDERER前缀(例如 ORDERER_GENERAL_LOCALMSPID)对以上变量进行覆写。注意:对于orderer的设置,我们需要生成并为orderer提供系统channel的创世区块。MSP配置对该区块的需求详见后面的章节。

Channel MSP设置

在系统的起源上,需要指定网络中出现的所有MSP的验证参数,并将其包含在系统channel的原始块中。回想一下,MSP验证参数由MSP标识符,信任的根证书,中间CA和管理证书以及OU规范和CRL组成。系统原始块在其设置阶段提供给orderer,并允许它们验证通道创建请求。如果系统原始块中包含两个具有相同标识符的MSP,则orderer拒绝该系统原始块,并且因此网络的启动将失败。

对于应用渠道,仅管理channel的MSP的验证组件需要驻留在channel的起源块中。我们强调应用程序的责任是在一个或多个peer加入该channel之前,确保正确的MSP配置信息被包含在channel的起源块(或最新配置块)中。

在通过configtxgen工具的帮助下引导通道时,可以通过在mspconfig文件夹中包含MSP的验证参数来配置通道MSP ,并在configtx.yaml相关部分中设置该路径。

在通道上重新配置 msp, 包括与该 msp 的 ca 相关的证书吊销列表的公告, 是通过 msp 的一个管理员证书的所有者创建一个 config_update 对象来实现的。管理员管理的客户端应用程序随后将向此 MSP 出现的通道发布此更新。

最佳实践

在本节中,我们详细介绍常见场景中MSP配置的最佳实践。

1)组织/公司和MSP之间的映射

我们建议组织和MSP之间存在一对一的映射。如果选择不同的映射类型的映射,则需要考虑以下内容:

  • 一个组织采用多种MSP 这对应于下面这种情况:(无论出于独立管理的原因还是私人原因)一个组织有各种各样的部门,每个部门以其MSP为代表。在这种情况下,一个peer节点只能被单个MSP拥有,且不会识别相同组织内标识在其他MSP的节点。这就是说,peer节点可以与相同子分支下的一系列其他peer节点共享组织数据,而不是所有构成组织的节点。

  • 使用单个MSP的多个组织 这对应于由类似会员架构管理的组织联盟的情况。在这里需要知道的是,peers将组织范围的信息传播给具有同一个MSP身份的peer,而不管它们是否属于同一个实际组织。这是MSP定义的粒度或peer的配置的限制。

2)一个组织有不同的部门(称组织单位), 它要向其授予对不同channel的访问权限。

两种处理方法:

  • 定义一个MSP以适应所有组织成员的成员资格 该MSP的配置将包括根CA列表,中间CA和管理员证书; 会员身份将包括OU会员所属的组织单位。然后可以定义策略以捕获特定的成员OU,并且这些策略可以构成channel的读/写策略或chaincode的背书策略。这种方法的限制是,八卦peer将考虑具有其本地MSP下的成员资格身份的peer作为同一组织的成员,并且因此将其与组织范围的数据(例如他们的状态)进行闲话。

  • 定义一个MSP来表示每个部门

  • 这将涉及为每个部门指定一组根CA,中间CA和管理证书的证书,以便跨MSP不存在重叠的认证路径。这意味着,例如,使用每个细分的不同的中间CA。这里的缺点是管理多个MSP而不是一个MSP,但这避免了以前的方法中存在的问题。还可以通过利用MSP配置的OU扩展来为每个部门定义一个MSP。

3)将客户端与同一组织的peers分开。

在许多情况下, 需要将身份的 “类型” 从身份本身中检索出来(例如,可能需要认可的签名保证由peer派生,而不是仅充当 orderers 的客户端或节点)。

对这些要求的支持有限。

允许这种分离的一种方法是为每个节点类型创建一个单独的中间CA - 一个用于客户端,一个用于peer/orderer; 并配置两个不同的MSP - 一个用于客户端,一个用于peer/orderer。该组织应该访问的channel将需要包括两个MSP,而背书政策将仅利用peer的MSP。这将最终导致组织被映射到两个MSP实例,并将对peer和客户端交互的方式产生一定的后果。

八卦不会受到同样的组织的所有同行仍然属于一个MSP的严重影响。peer可以基于本地MSP的策略限制某些系统chaincode的执行。例如,如果请求由其本地MSP的管理员签名,而该管理人员只能是客户端(最终用户应该位于该请求的起点),peer将仅执行“joinChannel”请求。我们可以解决这个不一致的情况,如果我们接受只有作为peer/orderer MSP的成员的客户才是MSP的管理员。

使用这种方法考虑的另一点是,peer根据其本地MSP中的请求发起者的成员身份来授权事件注册请求。显然,由于请求的发起者是客户端,请求发起者始终注定属于与请求的peer不同的MSP,并且peer将拒绝该请求。

4)管理员和CA证书。

必须将 msp 管理证书设置为与 msp 为信任根或中间 ca 所考虑的任何证书不同。这是一种常见的 (安全) 做法, 即将成员资格组件的管理职责与颁发新证书和/或对现有认证的验证分开。

5)将中间CA列入黑名单

如前面部分所述,通过重新配置机制(手动重新配置本地MSP实例,以及适当构造用于channel的MSP实例的config_update信息)来实现MSP的重新配置。显然,有两种方法可以确保在MSP中考虑的中间CA不再被认为是MSP的身份验证:

  1. 将MSP重新配置为不再将该中间CA的证书包含在可信中间CA证书列表中。对于本地配置的MSP,这意味着该CA的证书将从intermediatecerts文件夹中删除。

  2. 重新配置MSP来包括由信任根产生的CRL,该CRL会声明提及的中间CA的证书。

在目前的MSP实现中,我们只支持方法(1),因为它更简单,不需要将不再考虑的中间CA列入黑名单。

6)CAs和TLS CAs

MSP身份的根CA和MSP TLS证书的根CA(和相对中间CA)需要声明在不同的文件夹中。这是为了避免不同类别的证书之间的混淆。这里不禁止MSP身份和TLS证书重复使用相同的CA,但是最佳做法建议在生产环境中避免这种情况。

最好的实践

  1. 为组织和MSP建立映射

MSP Identity Validity Rules

如MSP描述中所述,MSP可以配置有一组根证书颁发机构(rCA)和可选的一组中间证书颁发机构(iCA)。 MSP的iCA证书必须由MSP的其中一个rCA或iCA签署。 MSP的配置可能包含证书撤销列表或CRL。如果在CRL中列出了任何MSP的根证书颁发机构,则MSP的配置中不得包含任何也包含在CRL中的iCA,否则MSP设置将失败。 每个rCA是认证树的根。也就是说,每个rCA可以是一个或多个iCA的证书的签名者,这些iCA将是其他iCA或用户证书的签名者。这里有一些例子:

     rCA1                rCA2         rCA3
      /    \                 |            |
   iCA1    iCA2             iCA3          id
    / \      |               |
iCA11 iCA12 id              id
 |
id

对于上图来讲,MPS接收的X.509证书,只有被 iCA11, iCA12, iCA2, iCA3 an rCA3 签名的,才会被认为是有效的,被其他中间CA机构签名的证书,都会被认为无效。

请注意,如果在MSP配置中指定了一个或多个组织单位,则证书的有效性也会受到同样的影响。回想一下,组织单位在MSP配置中被指定为一对两个值,分别表示证明组织单位的证书颁发机构(parent-cert,ou-string)和实际组织单位标识符。如果证书C由在MSP配置中已经为其指定了组织单位的iCA或rCA签名,则在其他要求中,如果其包括作为其OU字段的一部分的字符串,则C被认为是有效的。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容