基于上篇博文中的例子《从0个组织开始搭建fabric网络》我们继续来做下面的实验,为org1添加用户
Fabric中的用户都是基于组织进行管理的,每次的CA server 也是基于某一个组织的msp进行启动的,要对不同的组织进行用户管理我们应该首先重新根据该组织的msp信息重新实例化CA server,然后用fabric-ca-client,进行admin的登录,在接着去创建组织的用户,这么说可能不太好理解下面我们通过例子来解释上面的表述
序言:
前面的博文中我们生成的用户都是通过命令cryptogen 根据文件crypto-config.yaml生成的用户, 当然这里讲的文件可能大家在上篇文章中没能找到,因为上篇中我们用的都是自己创建的文件,没有用 fabric demo中的文件
前面我们自动创建了一个用户
Admin不能算作我们创建的用户,那个是系统默认都会有的一个用户组织管理用户,是用来后续进行用户管理的用户。
Users.Count=1 表示我们创建一个普通用户。
cryptogen 命令帮助我们生成了用户的msp信息
但是实际的生产中我们或许会需要再额外创建组织用户,下面我们正文开始
一,修改docker-fabric-dps-cacli.yaml文件,增加CA容器
有几个组织就加几个ca容器进去,这里我只有一个组织所以可以看到我只有一个ca容器名字就叫ca
version: '2' services: ca: container_name: ca image: hyperledger/fabric-ca environment: - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - FABRIC_CA_SERVER_CA_NAME=ca - FABRIC_CA_SERVER_TLS_ENABLED=false - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/f41f47665d4885bfe91c0a040a243bd831d36b688f9bb3cd64b61e2bcab06621_sk ports: - "7054:7054" command: sh -c 'fabric-ca-server start --ca.certfile ./crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem --ca.keyfile ./crypto-config/peerOrganizations/org1.example.com/ca/f41f47665d4885bfe91c0a040a243bd831d36b688f9bb3cd64b61e2bcab06621_sk -b admin:adminpw -d' volumes: - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
这里我们注意到,Fabric CA Server启动的时候,带了3个重要的参数:ca.certfile 指定了CA的根证书,ca.keyfile 指定了接下来给新用户签发证书时的私钥,每个组织私钥的名字是不一样的,所以需要找准再传入。另外就是-b参数,指定了CA Client连接CA Server时使用的用户名密码。
下面我们通过命令来启动ca容器:
docker-compose -f docker-fabric-dps-cacli.yaml up -d
二,安装fabric-ca-client
不同版本的fabric对应不同版本的fabric-ca-client版本
下载地址:
https://github.com/hyperledger/fabric-ca/releases
我这边用的都是1.4.3版本的所以我下载的都是相应版本的fabric-ca-client
wget https://github.com/hyperledger/fabric-ca/releases/download/v1.4.3/hyperledger-fabric-ca-linux-amd64-1.4.3.tar.gz tar -xvf hyperledger-fabric-ca-linux-amd64-1.4.3.tar.gz
三,使用CA Client生成新用户
1>我们首先需要以管理员身份使用CA Client连接到CA Server,并生成相应的文件。
export FABRIC_CA_CLIENT_HOME="/usr/local/gopath/src/github.com/hyperledger/fabric/network004/crypto-config/peerOrganizations/org1.example.com/ca/newuser" fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
执行以上命令用admin用户连接ca server
2>注册新用户
接下来我们想新建一个叫devin的用户,那么需要先执行这个命令:
fabric-ca-client register --id.name devin --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'
我们拿到这个密码以后就可以再次使用enroll命令,给devin这个用户生成msp的私钥和证书:
1 fabric-ca-client enroll -u http://devin:wraduuiXlKnV@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/devinmsp
现在新用户devin的私钥和证书就在$FABRIC_CA_CLIENT_HOME/devinmsp目录下,我们可以使用tree命令查看一下:
因为我们是给org1设置的CA,用户devin也是在org1下,所以需要把~/ca/devinmsp下面的文件转移到org1下面。
1 cd /usr/local/gopath/src/github.com/hyperledger/fabric/network004/crypto-config/peerOrganizations/org1.example.com/users 2 install -d devin/msp 3 cp -r /usr/local/gopath/src/github.com/hyperledger/fabric/network004/crypto-config/peerOrganizations/org1.example.com/ca/devinmsp/* ./msp/
不知道什么原因,Fabric在使用的时候需要用到msp文件夹下的admincerts文件夹,但是CA Client在生成的时候并没有这个文件夹,所以我们需要从signcerts这个文件夹中拷贝一个过来,运行以下命令:
上面是user1的目录和文件结构
下面我们把devin/msp下的signcerts目录拷贝到admincerts目录
cp -r ./signcerts ./admincerts
参考文档: