- 创建ca容器
创建ca容器时一定要注意组织的名称!!!有时候组织名错了容器依然可以跑起来但无法正常认证(如volumes文件挂载部分的组织名错了之后注册的组织无法整通过认证),其他地方一般不需要修改。
容器的启动文件可以参考其他已有节点的ca容器文件,里面有两处证书需要改一下,改为对应组织的ca文件夹下的那个全部是字母的证书,端口就改成还没被用过的端口(改冒号前面那个,a:b映射规则是把主机的a端口映射到容器的b端口,所以改前面那个将本地剩余的端口映射到ca容器的7054端口),一般是xx54(9054或者10054这样,)
创建完后启动稍微等一会看一下ca容器是否正常运行,如果没有正常运行就”docker logs 容器id“查一下日志看一下为什么,想办法让ca正常运行(一般是端口和证书名这两个地方容易出问题)。
后面的命令中以第一个图中的ca配置运行,org4,ca4(监听端口为9054)
- 用ca-client以对应组织的管理员身份登陆ca(在终端中,不是容器中)
export FABRIC_CA_CLIENT_HOME=$CA_USER_HOME/admin
这里的CA_USER_HOME是对应组织的ca文件夹的路径,里面应该有两个证书,就是第二个图的那个路径,具体参照自己本地网络的文件结构
fabric-ca-client enroll -u http://admin:adminpw@localhost:9054
这里最后那个地方放的是对应组织的ca监听端口
- 注册并生成新用户证书
fabric-ca-client register --id.name usertest --id.affiliation org1.department1
这里的usertest位置放的是新用户名称,后面的affiliation参数好像对用户没有影响,不用动它
执行完终端会显示一串密码
- 用刚刚的密钥生成证书
fabric-ca-client enroll -u http://usertest:iyFKvrdKZwQb@localhost:9054 -M /usr/local/gopath/src/github.com/hyperledger/fabric/network006/causers/usertest
usertest位置是用户名称,要和前面注册时的保持一致,9054是ca的端口,最后面是证书的存放位置,这个可以自己决定,本人是放在了ca文件夹下面新建的与用户同名的文件夹里。
正常执行完在刚刚用户证书的存放文件夹里可以看到三个文件夹cacerts、keystore、signcerts需要
- 自己创建一个admincerts文件夹然后把signcerts文件夹里的证书复制一份到admincerts里,如果不这么做后面操作链码会报错。
- 然后创建一个名为msp的文件夹把刚刚的4个文件夹全部放进去,然后把usertest文件夹(msp的父文件夹)复制一份到org4的users文件夹下。
最后就可以进入cli容器中以新用户身份操作链码,需要先切换到对应组织,
CORE_PEER_ID=peer0.org4.example.com
CORE_PEER_ADDRESS=peer0.org4.example.com:7051
CORE_PEER_CHAINCODELISTENADDRESS=peer0.org4.example.com:7052
CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org4.example.com:7051
CORE_PEER_LOCALMSPID=Org4MSP
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org4.example.com/peers/peer0.org4.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org4.example.com/users/Admin@org4.example.com/msp
此时是以org4的管理员身份操作的,
export CORE_PEER_MSPCONFIGPATH="/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org4.example.com/users/usertest2/msp"
切换到usertest2用户(刚刚注册的)再操作链码。过程没有问题的话就可以正常操作链码了。