xvn*_*vnm 1 hyperledger-fabric
我已使用生成了证书cryptogen
。
并检查了生成的证书,openssl
并注意到该证书缺少可用于区分对等角色和客户端角色的信息。我相信admin
可以区分,因为管理证书是用区块链编写的,但是没有有关客户端和对等方的信息。
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
...
Run Code Online (Sandbox Code Playgroud)
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 = p0.test.com
...
Run Code Online (Sandbox Code Playgroud)
(我看到的唯一区别是与主题的CN,密钥和ID相关的事物)
我想知道的原因是,尽管无法区分它们的角色,但是由于加入频道时CSCC失败,因此无法使用客户端的MSP来支持节点设置。
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]])
Run Code Online (Sandbox Code Playgroud)
(其他与之同行的MSP成功加入了btw频道)
因此角色系统按预期工作,但是CSCC实际上是如何认识证书角色的?有隐藏的机制吗?
我的答案是基于Fabric 1.4.3和更高版本。
您看到的特定错误意味着您没有使用被视为对等方管理员的身份(密钥/证书对)来调用JoinChannel API。在1.4.3之前的版本中,管理员是通过将证书显式地放入对等方的本地MSP目录中的admincerts文件夹中来定义的。在1.4.3及更高版本中,您还可以通过“通用名称”中的特定OU来标识管理员(更多详细信息,请参见下文)。
因此,您需要使用对等管理员来调用JoinChannel API。使用cryptogen时,将在users目录中创建一个admin用户。调用JoinChannel时,应使用此标识。
有关MSP角色及其定义的详细信息:
有5个可能的角色:
为了使用对等,客户端和订购者角色,您需要启用“身份分类”功能。使用基于文件夹的MSP结构时,可通过在MSP目录根目录下的config.yaml文件中设置启用“ 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
Run Code Online (Sandbox Code Playgroud)
这定义了如何通过X509证书的CommonName属性中存在的OU区分MSP角色。上面的示例说,由cacerts / ca.sampleorg-cert.pem颁发的具有OU = client的任何证书都将被标识为客户端,OU = peer为对等,等等。从1.4.3开始,还存在一个OU用于管理员,因此您不再需要将证书明确放置在MSP目录的admincerts文件夹中。
使用cryptogen时,可以通过在crypto-config.yaml文件中将EnableNodeOUs设置为true 并运行cryptogen generate --config crypto-config.yaml来启用此功能。例如,这将为对等组织启用NodeOU:
PeerOrgs:
- Name: org1
Domain: org1.example.com
EnableNodeOUs: true
Template:
Count: 2
SANS:
- "localhost"
- "127.0.0.1"
- "{{.Hostname}}-{{.Domain}}"
Users:
Count: 1
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
203 次 |
最近记录: |