创建channel失败:This identity is not an admin

今天遇到一个错误:

创建channel的时候orderer错误信息如下:

 [msp] SatisfiesPrincipal -> DEBU 701 Checking if identity satisfies ADMIN role for 
 [cauthdsl] func2 -> DEBU 702 0xc4203fc8d0 identity 0 does not satisfy principal: This identity is not an admin
 [cauthdsl] func2 -> DEBU 703 0xc4203fc8d0 principal evaluation fails

按照以往的经验,对照client发起的msp证书,和orderer msp下面的admin证书,发现两者是匹配的,出了怪事了。

费半天劲一通调试,修改orderer的代码增加日志信息。
最后发现orderer验证创建channel的证书并不是用的LocalMSP目录下面的证书,而是使用的genesis block里面注册的证书。

  1. orderer验证创建channel时的证书,必须是admin证书,这个证书必须在genesis block里面定义,而不是在LocalMSP目录下面的admincerts目录。所以你即使把客户端证书拷贝到orderer的对应目录下面,重启orderer也不会生效,除非修改genesis block,把客户证书加入到admin证书列表里面。
    可以把orderer下面系统channel的ledger文件打开看,例如:hyperledger/production/orderer/chains/testchainid/blockfile_000000
  2. orderer验证admin证书是否有效,是通过字节比较的方式。

你可能感兴趣的:(创建channel失败:This identity is not an admin)