基於上篇博文中的例子《從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
參考文檔: