fabric網路中,為組織新增使用者
基於上篇博文中的例子《從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=./crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem - FABRIC_CA_SERVER_TLS_KEYFILE=./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/keystore/8468139465d186304c9c44b3076a1dfce0f17ca1799870142e276a6de4304a6a_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/peers/peer0.org1.example.com/msp/keystore/8468139465d186304c9c44b3076a1dfce0f17ca1799870142e276a6de4304a6a_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" 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