这段时间一直在看CA的相关内容,在能够利用CA动态的生成证书后,就开始思考如何把CA生成的证书加入到网络中,和链码进行交互。目前应该是只有下面两种方法:
1.通过SDK来与网络交互
这点是官方文件就已经给出的,包含管理员enroll,新用户register,新用户enroll以及利用新用户证书query和invoke操作等。就按照官方顺序一步步的操作下来,一点问题没有。
2. 通过cli交互
因为1.4版本官方已经给出了包含启动ca镜像的脚本文件(./byfn.sh )了,所以就一直想着可以通过cli直接改变msp路径来使用新生成的证书。(参考深蓝大神 https://www.cnblogs.com/studyzy/p/7482451.html)
基本过程:
1)使用命令 ./byfn.sh up -a -s couchdb
启动网络
2)进入ca-peerOrg1容器
docker exec -it ca_peerOrg1 bash
3) 注册管理员用户以及注册新用户
cd /usr/local/bin
export FABRIC_CA_CLIENT_HOME=$HOME/ca
./fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
./fabric-ca-client register --id.name Jim --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'
./fabric-ca-client enroll -u http://Jim:password@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/Jim
4)此时在/root/ca文件夹中就会出现:
其中msp对应的是管理员用户,而Jim就是我们新注册的用户
5)通过docker cp命令将msp文件夹和Jim文件夹复制到crypto-config/peerOrganizations/org1.example.com/users
中,具体的处理细节参考深蓝大神的 https://www.cnblogs.com/studyzy/p/7482451.html
最终处理效果:
管理员账户
Jim用户
6)在安装好大神写的链码后,进入cli容器切换用户调用链码(?代指Jim或devin):
docker exec -it cli bash
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/?/msp
peer chaincode query -C mychannel -n test1 -c '{"Args":["cert"]}'
7)结果:
管理员用户:
成功!!!!!
Jim用户:
出错!竟然出错了!!! 简直不敢相信!!
后面还把Jim的admincerts文件夹内容换成了msp的管理员的signcerts,结果还是出错。
不知道有没有大神能指导下,为什么普通用户就不能在cli下直接调用链码呀?
#####################################2019.09.08分割线#####################################
仔细的看了下crypto-config文件夹下的所有证书,发现所有的用户证书OU都是client!!!经过实验,client的标识的确能成功,所以作为用户来讲的话client和admin标识都可以在命令行下调用成功。不过现在还是不太清楚user和client的区别。