Hyperledger fabric 如何在Hyperledger结构中区分“cryptogen”生成的客户端证书和对等证书?

Hyperledger fabric 如何在Hyperledger结构中区分“cryptogen”生成的客户端证书和对等证书?,hyperledger-fabric,Hyperledger Fabric,我已经用cryptogen生成了证书 并使用openssl检查生成的证书,发现它缺少可用于区分对等角色和客户端角色的信息。我相信管理员是可以区分的,因为管理员证书是用区块链编写的,但没有关于客户端和对等方的信息 Certificate: Data: Version: 3 (0x2) Signature Algorithm: ecdsa-with-SHA256 Issuer: C = US, ST = California, L = San

我已经用cryptogen生成了证书

并使用openssl检查生成的证书,发现它缺少可用于区分对等角色和客户端角色的信息。我相信管理员是可以区分的,因为管理员证书是用区块链编写的,但没有关于客户端和对等方的信息

Certificate:
    Data:
        Version: 3 (0x2)
        Signature Algorithm: ecdsa-with-SHA256
        Issuer: C = US, ST = California, L = San Francisco, O = test.com, CN = ca.test.com
        Validity
            Not Before: Sep 19 01:49:00 2019 GMT
            Not After : Sep 16 01:49:00 2029 GMT
        Subject: C = US, ST = California, L = San Francisco, CN = User1@test.com
...
我所看到的唯一区别是主体的CN、键和ID相关的东西

我想知道的原因是,虽然他们的角色无法区分,但使用客户端的MSP进行背书节点设置将无法工作,因为加入通道时CSCC失败

Error: proposal failed (err: bad proposal response 500: access denied for [JoinChain][testc]: [Failed verifying that proposal's creator satisfies local MSP principal during channelless check policy with policy [Admins]: [This identity is not an admin]])
其他拥有MSP的同行成功加入channel btw


因此,角色系统按预期工作,但CSCC实际上是如何了解证书角色的?是否存在隐藏机制?

这是hyperledger fabric平台自行处理的一些事情。我们只需要处理客户端证书hyperledger结构支持基于属性的证书。因此,您可以通过它们的属性识别不同的证书


在结构网络中,每个组件都有自己的标识。这意味着每个组件都有自己的证书,该证书由结构自行处理

这是hyperledger fabric平台自行处理的事情。我们只需要处理客户端证书hyperledger结构支持基于属性的证书。因此,您可以通过它们的属性识别不同的证书


在结构网络中,每个组件都有自己的标识。这意味着每个组件都有自己的证书,该证书由结构自行处理

管理员证书存储在msp的admincerts目录中。如果事务的签名可以通过它进行验证,我们可以说事务的发送者是admincerts。简而言之,fabric不是从证书本身而是从msp了解证书角色。

管理员的证书存储在msp的admincerts目录中。如果事务的签名可以通过它进行验证,我们可以说事务的发送者是admincerts。简而言之,fabric不是从证书本身而是从msp了解证书角色。

它非常简单,没有什么复杂或隐藏的机制,正如您所知,它是一个PKI

每个实体对等,订购方都有自己的MSP

那么MSP中存在什么呢

.
├── admincerts
├── cacerts
├── keystore
├── signcerts
└── tlscacerts
正如您所见,由于本地MSP,每个对等方都会产生信任,在对等方MSP的结构之上,我们有admincerts,因此,无论我们提到哪个身份,对等方都将假定该身份为管理员,并且您需要使用该管理员凭据对创建通道、加入通道或安装链码事务进行签名

如果您更改凭据,对等方将投诉

与cacerts相同:对等方将假定cacerts文件夹中存在的任何rootCA证书链,它将使用该ca颁发的标识接受来自客户端的任何请求

来到您的客户和同行面前:

嘿,在注册身份时,您将提到角色,这是属性的形式,用于许多用例,当您使用fabric ca而不是cryptogen工具生成证书时,您将获得更多的见解


检查

它非常直截了当,没有什么复杂或隐藏的机制,正如您所知,它是一个PKI

每个实体对等,订购方都有自己的MSP

那么MSP中存在什么呢

.
├── admincerts
├── cacerts
├── keystore
├── signcerts
└── tlscacerts
正如您所见,由于本地MSP,每个对等方都会产生信任,在对等方MSP的结构之上,我们有admincerts,因此,无论我们提到哪个身份,对等方都将假定该身份为管理员,并且您需要使用该管理员凭据对创建通道、加入通道或安装链码事务进行签名

如果您更改凭据,对等方将投诉

与cacerts相同:对等方将假定cacerts文件夹中存在的任何rootCA证书链,它将使用该ca颁发的标识接受来自客户端的任何请求

来到您的客户和同行面前:

嘿,在注册身份时,您将提到角色,这是属性的形式,用于许多用例,当您使用fabric ca而不是cryptogen工具生成证书时,您将获得更多的见解


检查

我的答案基于Fabric 1.4.3及更高版本

您看到的特定错误意味着您没有使用被视为对等方管理员的标识密钥/证书对调用JoinChannel API。在1.4.3之前,管理员是通过将证书显式放置在对等方本地MSP目录的admincerts文件夹中来定义的。在1.4.3及更高版本中,您还可以通过通用名称中的特定OU来识别管理员。有关更多详细信息,请参见下文

因此,您需要使用对等管理员调用JoinChannel API。使用cryptogen时,将在用户目录中创建一个管理员用户。调用JoinChannel时应使用此标识

有关MSP角色及其定义方式的详细信息:

有5种可能的角色:

管理 同龄人 客户 订购者 成员 为了使用对等、客户端和订购者角色,您需要启用。使用基于文件夹的MSP结构时,可通过在MSP目录根目录的config.yaml文件中设置Enable NodeOUs来实现:

NodeOUs:
  Enable: true
  ClientOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: client
  PeerOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: peer
  AdminOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: admin
  OrdererOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: orderer
这定义了如何通过X509证书的CommonName属性中存在的OU来区分MSP角色。上面的示例说明,由cacerts/ca.sampleorg-cert.pem颁发的任何证书,如果OU=client,将被标识为client,OU=peer作为peer,等等。从1.4.3开始,还有一个用于管理员的OU,因此您不再需要显式地将证书放在MSP目录的admincerts文件夹中

使用cryptogen时,可以通过在crypto-config.yaml文件中将EnableNodeOUs设置为true并运行cryptogen generate-config crypto-config.yaml来启用此功能。例如,这将为对等组织启用:

PeerOrgs:
  - Name: org1
    Domain: org1.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
      SANS:
         - "localhost"
         - "127.0.0.1"
         - "{{.Hostname}}-{{.Domain}}"
    Users:
      Count: 1

我的答案基于Fabric 1.4.3及更高版本

您看到的特定错误意味着您没有使用被视为对等方管理员的标识密钥/证书对调用JoinChannel API。在1.4.3之前,管理员是通过将证书显式放置在对等方本地MSP目录的admincerts文件夹中来定义的。在1.4.3及更高版本中,您还可以通过通用名称中的特定OU来识别管理员。有关更多详细信息,请参见下文

因此,您需要使用对等管理员调用JoinChannel API。使用cryptogen时,将在用户目录中创建一个管理员用户。调用JoinChannel时应使用此标识

有关MSP角色及其定义方式的详细信息:

有5种可能的角色:

管理 同龄人 客户 订购者 成员 为了使用对等、客户端和订购者角色,您需要启用。使用基于文件夹的MSP结构时,可通过在MSP目录根目录的config.yaml文件中设置Enable NodeOUs来实现:

NodeOUs:
  Enable: true
  ClientOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: client
  PeerOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: peer
  AdminOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: admin
  OrdererOUIdentifier:
    Certificate: cacerts/ca.sampleorg-cert.pem
    OrganizationalUnitIdentifier: orderer
这定义了如何通过X509证书的CommonName属性中存在的OU来区分MSP角色。上面的示例说明,由cacerts/ca.sampleorg-cert.pem颁发的任何证书,如果OU=client,将被标识为client,OU=peer作为peer,等等。从1.4.3开始,还有一个用于管理员的OU,因此您不再需要显式地将证书放在MSP目录的admincerts文件夹中

使用cryptogen时,可以通过在crypto-config.yaml文件中将EnableNodeOUs设置为true并运行cryptogen generate-config crypto-config.yaml来启用此功能。例如,这将为对等组织启用:

PeerOrgs:
  - Name: org1
    Domain: org1.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
      SANS:
         - "localhost"
         - "127.0.0.1"
         - "{{.Hostname}}-{{.Domain}}"
    Users:
      Count: 1