我们可以通过结构为多个组织设置一个CA吗?

时间:2019-01-11 11:30:59

标签: hyperledger-fabric hyperledger-fabric-ca hyperledger-fabric-sdk-go hyperledger-fabric-sdk-js

我在不同的计算机上设置了多个组织。

Machine 1
 -> peer0.org1.example.com
 -> ca.org1.example.com
 -> orderer.example.com 

Machine 2
-> peer0.org2.example.com
-> peer0.org3.example.com

我创建了一个由三个组织共享的频道。

现在的问题是,当我尝试从组织2和组织3访问数据时,它给我以下错误消息

未知:访问被拒绝:频道[mychannel]创建者单位[Org2MSP]

另一方面,如果我尝试通过CLI执行相同的查询,则交易将成功执行,而不会出现任何错误

我的问题是:我们可以为多个组织设置一个CA。如果是,如何解决拒绝访问的问题?

1 个答案:

答案 0 :(得分:1)

要回答您的主要问题: 1个ca服务器是否可能包含1个以上的根身份。答案是肯定的Multiple CAs。该解决方案使用一个1个fabric-ca-server来提供1个以上的根身份。在Hyperledger架构中,根身份用作根Identity 1组织。

但是您应该使用这种架构吗?要回答这个问题,我们必须知道fabric-ca-server的角色以及在区块链网络(特定于Hyperledger)中如何处理身份。

  1. 用于验证区块链网络内部以及不同组件(对等,订购者,客户)之间的身份。 HLF(Hyperledger Fabric)使用MSP(会员服务提供商)的抽象概念。在HLF的当前实现中,它使用X509证书来构造此身份。重要的是要知道唯一的要求是X509证书。您不需要不需要Fabric-ca-server。要构造MSP架构,需要在MSP证书的磁盘上使用特定的结构来构造身份。所有组件都需要(某些部分)此结构。
  2. fabric-ca-server用于创建MSP结构所需的X509证书。例如,当您要注册额外的对等方,订购者,客户等时,将使用此方法。要获得所有这些材料,通常可以使用fabric-ca-client或SDK。客户端能够以默认MSP使用的正确文件夹结构导出此资料。

那么您应该为多个组织使用1个fabric-ca-server吗?我的回答是不会。您想要的是所有组织彼此独立,并且一个ORG不能为另一个ORG构造身份。如果您使用1台服务器包含多个身份,则这也意味着私钥资料存储在1台服务器上,因此您可以为所有组织创建身份。

所以下一个问题如何解决拒绝访问的问题实际上是另一个问题。这很可能是由于HLF用来指向MSP文件夹结构内部特定部分的环境变量配置不正确。因此,您需要查看CLI内使用哪种环境变量,并在其他容器内使用相同的环境变量(如果您希望具有相同的标识)。

TL; DR; fabric-ca-server用于创建X509证书,该证书可用于构造MSP。 MSP是HLF内部的实际身份,最佳实践是对每个组织使用1个root-ca。