Michael.W谈hyperledger Fabric第12期-Fabric账号详解
Michael.W谈hyperledger Fabric第12期-Fabric账号详解
1 Fabric的账号机制
Fabric中的账号是根据PKI规范生成的一组证书和秘钥文件。
从表象上看Fabric账号就是在利用指令生成的crypto-config目录下,某组织、节点或用户对应路径下的msp目录。
$ cryptogen generate --config=crypto-config.yaml
节点或用户的msp,其下面都是包含5个文件夹:
- admincerts:管理员证书
- cacerts:根CA服务器的证书
- keystore:私钥
- signcerts:符合x.509标准的节点或者用户证书文件。X509:通用的证书规则
- tlscacerts:通信时进行数据加密的证书,即TLS根CA的证书
组织的msp下面包含3个文件夹:
在yaml文件中进行数据卷挂载的时候,我很少会单独地去挂载账户下的某一个文件。而是常常直接挂载整个msp目录,这样当系统具体需要哪个证书文件的时候就会直接去msp目录下找。
整个证书体系,由Fabirc框架来维护。在Fabric网络中,只要有数据通信,那么必定会被签名。这样任何一笔交易都无法抵赖。而普通的账号+密码组合是完全做不到这点的。
综上所述,Fabric账号的作用如下:
- 保证记录在区块链中的数据具有不可逆、不可篡改
- Fabric中每条交易都会加上发起者的标签(签名证书),同时用发起人的私钥进行加密
- 如果交易需要其他组织的节点提供背书功能,那么背书节点也会在交易中加入自己的签名
2 隐藏的CA模块
为什么Fabric中可以同指令cryptogen能生成这么多用户证书呢?
这是因为在Fabric框架中有一个隐藏的CA模块,其作用是帮助创建账号。
3 什么地方需要账号证书?
-
启动orderer节点的时候:
启动orderer的时候需要通过配置环境变量给当前启动的Orderer设定相应的账号。 -
启动peer节点的时候:
尽管没有配置环境变量,但是在数据卷挂载中挂载了peer节点的msp目录。 -
客户端在启动时不需要账号,但是在对某节点进行操作时需要用到账号。例如在初始化链码的时候:
# 设置环境变量,如果前面有设置过可以跳过 tlsfile=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/michael.com/orderers/orderer.michael.com/msp/tlscacerts/tlsca.michael.com-cert.pem # 链码初始化,给michael账户和wang账户分别初始化为1000和2000元。 $ peer chaincode instantiate -o orderer.michael.com:7050 --tls --cafile $tlsfile -C michaelchannel -n michaelchaincode -v 1.0 -P "AND ('Org1MSP.member','Org2MSP.member')" -c '{"Args":["init","michael","1000","wang","2000"]}'
在指令中需要指明orderer节点的msp目录。
因为客户端去操作某个节点时,必须要校验身份。不是说谁都可以随意来操作的节点的。
当客户端连接到某peer节点时,就需要加载证书。 -
创建通道的时候:
# 设置环境变量,即orderer节点的tlsca证书地址 $ tlsfile=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/michael.com/orderers/orderer.michael.com/msp/tlscacerts/tlsca.michael.com-cert.pem # 创建通道 $ peer channel create -o orderer.michael.com:7050 --tls true --cafile $tlsfile -c michaelchannel -f ./channel-artifacts/channel.tx
客户端创建通道的时候需要证书,但是通道本身是没有证书的。因为通道只是一种隔离数据的方式。
Fabric的账号在编写yaml配置文件时,是一个必须要仔细检查的地方。配置文件时发生的错误,百分之九十都是出在账户证书上!
ps:
本人热爱图灵,热爱中本聪,热爱V神,热爱一切被梨花照过的姑娘。
以下是我个人的公众号,如果有技术问题可以关注我的公众号来跟我交流。
同时我也会在这个公众号上每周更新我的原创文章,喜欢的小伙伴或者老伙计可以支持一下!
如果需要转发,麻烦注明作者。十分感谢!
公众号名称:后现代泼痞浪漫主义奠基人