說明
注冊example.com的管理員Admin@example.com
注冊org1.example.com的管理員Admin@org1.example.com
注冊org2.example.com的管理員Admin@org2.example.com
各個組織分別使用自己的Admin賬戶創(chuàng)建其它賬號
說明
超級賬本HyperLedger視頻教程演示匯總:HyperLedger FabricCA的視頻講解–“主頁”中可領優(yōu)惠券
本文是對hyperledger的fabric項目的全手動部署的補充厦滤,是HyperLedger FabricCA使用的視頻演示,這里將演示如何使用fabric-ca為每個組件和用戶生成證書遂跟。
如果對下面的操作有不清楚的地方,可以參閱超級賬本HyperLedger的fabricCA的用法講解响迂。
可以使用下面的部署方式:
這里做了簡化歪今,只部署了一個Fabric-CA作為rootCA。
將創(chuàng)建一個由兩個組織org1.example.com和org2.example.com組成的的聯(lián)盟揖铜。
另外還有一個組織example.com用來部署orderer喊熟。
example.com部署了一個solo模式的orderer毁靶。(多個orderer的部署方式,以后探討)
orderer.example.com
org1.example.com部署了兩個peer:
peer0.org1.example.com
peer1.org1.example.com
org2.example.com部署了一個peer:
peer0.org2.example.com
每個組織都要有一個Admin用戶逊移,每個組件(peer/orderer)也需要一個賬號,因此需要通過fabric-ca創(chuàng)建7個用戶:
example.com:? ? ? Admin@example.com? ? ? orderer.example.com
org1.example.com:? Admin@org1.example.com? peer0.org1.example.com? peer1.org1.example.com?
org2.example.com:? Admin@org2.example.com? peer0.org2.example.com
這里只創(chuàng)建了Admin用戶龙填,普通用戶的創(chuàng)建方式相同胳泉,只是普通用戶的證書不需要添加到目標組件的admincerts目錄中。
啟動fabric-ca
fabirc-ca的編譯:
$ go get -u github.com/hyperledger/fabric-ca
$ cd $GOPATH/src/github.com/hyperledger/fabric-ca
$ make fabric-ca-server
$ make fabric-ca-client
$ ls bin/
fabric-ca-client? fabric-ca-server
這里將fabric-ca部署在/opt/app/fabric-ca/server目錄中:
mkdir -p /opt/app/fabric-ca/server
cp -rf $GOPATH/src/github.com/hyperledger/fabric-ca/bin/*? /opt/app/fabric-ca/server
ln -s /opt/app/fabric-ca/server/fabric-ca-client? /usr/bin/fabric-ca-client
直接啟動ca岩遗,fabric-ca admin的名稱為admin扇商,密碼為pass蹋盆。(這里只是演示解阅,生產(chǎn)中使用,你需要根據(jù)實際的情況配置)
cd /opt/app/fabric-ca/server
./fabric-ca-server start -b? admin:pass &
如果有刪除聯(lián)盟和刪除用戶的需求鹦蠕,需要用下面的方式啟動:
cd /opt/app/fabric-ca/server
./fabric-ca-server start -b admin:pass --cfg.affiliations.allowremove? --cfg.identities.allowremove &
注意:這里只是演示用法梆靖,直接用sqlite存儲用戶信息控汉,生產(chǎn)中,請根據(jù)情況配置ldap或者mysql等數(shù)據(jù)庫:HyperLedger FabricCA Config Database and LDAP返吻。
生成fabric-ca admin的憑證
下面的操作在《hyperledger的fabric項目的全手動部署》中創(chuàng)建的fabric-deploy目錄中進行后續(xù)操作姑子。
cd ~/fabric-deploy
mkdir fabric-ca-files
生成fabric-ca admin的憑證,用-H參數(shù)指定client目錄:
mkdir -p `pwd`/fabric-ca-files/admin
fabric-ca-client enroll -u http://admin:pass@localhost:7054 -H `pwd`/fabric-ca-files/admin
也可以用環(huán)境變量FABRIC_CA_CLIENT_HOME指定了client的工作目錄测僵,生成的用戶憑證將存放在這個目錄中街佑。
export FABRIC_CA_CLIENT_HOME=`pwd`/fabric-ca-files/admin
mkdir -p $FABRIC_CA_CLIENT_HOME
fabric-ca-client enroll -u http://admin:pass@localhost:7054
為了防止混亂,后面的演示操作中,都直接用-H指定目錄沐旨。
創(chuàng)建聯(lián)盟
上面的啟動方式默認會創(chuàng)建兩個組織:
$ fabric-ca-client? -H `pwd`/fabric-ca-files/admin? affiliation list
2018/05/07 02:36:46 [INFO] [::1]:56148 GET /affiliations 200 0 "OK"
affiliation: .
? affiliation: org2
? ? ? affiliation: org2.department1
? affiliation: org1
? ? ? affiliation: org1.department1
? ? ? affiliation: org1.department2
為了查看信息的時候森逮,看到的輸出比較簡潔,用下面的命令將其刪除:
fabric-ca-client -H `pwd`/fabric-ca-files/admin? affiliation remove --force? org1
fabric-ca-client -H `pwd`/fabric-ca-files/admin? affiliation remove --force? org2
執(zhí)行下面命令創(chuàng)建聯(lián)盟:
fabric-ca-client? -H `pwd`/fabric-ca-files/admin? affiliation add com
fabric-ca-client? -H `pwd`/fabric-ca-files/admin? affiliation add com.example
fabric-ca-client? -H `pwd`/fabric-ca-files/admin? affiliation add com.example.org1
fabric-ca-client? -H `pwd`/fabric-ca-files/admin? affiliation add com.example.org2
創(chuàng)建聯(lián)盟如下:
$ fabric-ca-client -H `pwd`/fabric-ca-files/admin? affiliation list
2018/04/28 15:19:34 [INFO] 127.0.0.1:38160 GET /affiliations 201 0 "OK"
affiliation: com
? affiliation: com.example
? ? ? affiliation: com.example.org1
? ? ? affiliation: com.example.org2
為每個組織準備msp
為example.com準備msp磁携,將ca證書等存放example.com組織的目錄中:
mkdir -p ./fabric-ca-files/example.com/msp
fabric-ca-client getcacert -M `pwd`/fabric-ca-files/example.com/msp? ? //-M需要指定絕對路徑
命令執(zhí)行結束后褒侧,會在fabric-ca-files/example.com/msp得到文件:
$ tree fabric-ca-files/example.com/msp/
example.com/msp/
|-- cacerts
|? `-- localhost-7054.pem
|-- intermediatecerts
|? `-- localhost-7054.pem
|-- keystore
`-- signcerts
注意通過getcacert得到msp目錄中只有CA證書。
同樣的方式為org1.example.com獲取msp:
mkdir -p fabric-ca-files/org1.example.com/msp
fabric-ca-client getcacert -M `pwd`/fabric-ca-files/org1.example.com/msp
為org2.example.com準備msp:
mkdir -p ./fabric-ca-files/org2.example.com/msp
fabric-ca-client getcacert -M `pwd`/fabric-ca-files/org2.example.com/msp
這里是用getcacert為每個組織準備需要的ca文件颜武,在生成創(chuàng)始塊的時候會用到璃搜。
在1.1.0版本的fabric-ca中,只會組件或用戶在操作區(qū)塊鏈的時候用到的證書和密鑰鳞上,不會生成用來加密grpc通信的證書这吻。
這里繼續(xù)沿用之前的fabric-deploy中的tls證書,在最后的重新部署操作篙议,只會替換msp目錄唾糯。
但是需要將驗證tls證書的ca添加到msp目錄中,如下:
cp -rf certs/ordererOrganizations/example.com/msp/tlscacerts? fabric-ca-files/example.com/msp/
cp -rf certs/peerOrganizations/org1.example.com/msp/tlscacerts/ fabric-ca-files/org1.example.com/msp/
cp -rf certs/peerOrganizations/org2.example.com/msp/tlscacerts/ fabric-ca-files/org2.example.com/msp/
如果在你的環(huán)境中鬼贱,各個組件域名的證書移怯,是由第三方CA簽署的,就將第三方CA的根證書添加到tlscacerts目錄中这难。
注冊example.com的管理員Admin@example.com
可以直接用命令行(命令比較長舟误,這里用\\截斷了):
fabric-ca-client register --id.name Admin@example.com --id.type client --id.affiliation "com.example.org1"? \
? ? --id.attrs '"hf.Registrar.Roles=client,orderer,peer,user","hf.Registrar.DelegateRoles=client,orderer,peer,user",\
? ? ? ? ? ? ? ? hf.Registrar.Attributes=*,hf.GenCRL=true,hf.Revoker=true,hf.AffiliationMgr=true,hf.IntermediateCA=true,role=admin:ecert'
也可以將命令行參數(shù)寫在fabric-ca admin的配置文件fabric-ca-files/admin/fabric-ca-client-config.yaml中。
$ ls fabric-ca-files/admin/admin/
fabric-ca-client-config.yaml? msp
為了演示清楚姻乓,這里使用修改配置文件的方式嵌溢,將fabric-ca-files/admin/fabric-ca-client-config.yaml其中的id部分修改為:
id:
? name: Admin@example.com
? type: client
? affiliation: com.example
? maxenrollments: 0
? attributes:
? ? - name: hf.Registrar.Roles
? ? ? value: client,orderer,peer,user
? ? - name: hf.Registrar.DelegateRoles
? ? ? value: client,orderer,peer,user
? ? - name: hf.Registrar.Attributes
? ? ? value: "*"
? ? - name: hf.GenCRL
? ? ? value: true
? ? - name: hf.Revoker
? ? ? value: true
? ? - name: hf.AffiliationMgr
? ? ? value: true
? ? - name: hf.IntermediateCA
? ? ? value: true
? ? - name: role
? ? ? value: admin
? ? ? ecert: true
注意最后一行role屬性,是我們自定義的屬性蹋岩,在配置文件中是單獨設置ecert屬性為true或者false赖草,如果在命令行中,添加后綴:ecert表示true剪个,例如:
fabric-ca-client register --id.affiliation "com.example.org1" --id.attrs "role=admin:ecert"
直接執(zhí)行下面的命令秧骑,即可完成用戶Admin@example.com注冊,注意這時候的注冊使用fabricCA的admin賬號完成的:
fabric-ca-client register -H `pwd`/fabric-ca-files/admin --id.secret=password
如果不用--id.secret指定密碼扣囊,會自動生成密碼乎折。
其它配置的含義是用戶名為Admin@example.com,類型是client如暖,它能夠管理com.example.*下的用戶笆檀,如下:
--id.name? Admin@example.com? ? ? ? ? ? ? ? ? ? ? ? ? //用戶名
--id.type client? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //類型為client
--id.affiliation "com.example"? ? ? ? ? ? ? ? ? ? ? ? //權利訪問
hf.Registrar.Roles=client,orderer,peer,user? ? ? ? ? ? //能夠管理的用戶類型
hf.Registrar.DelegateRoles=client,orderer,peer,user? ? //可以授權給子用戶管理的用戶類型
hf.Registrar.Attributes=*? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //可以為子用戶設置所有屬性
hf.GenCRL=true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //可以生成撤銷證書列表
hf.Revoker=true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //可以撤銷用戶
hf.AffiliationMgr=true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //能夠管理聯(lián)盟
hf.IntermediateCA=true? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //可以作為中間CA
role=admin:ecert? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //自定義屬性
生成Admin@example.com憑證:
$ mkdir -p ./fabric-ca-files/example.com/admin
$ fabric-ca-client enroll -u http://Admin@example.com:password@localhost:7054? -H `pwd`/fabric-ca-files/example.com/admin
$ ls ./fabric-ca-files/example.com/admin
fabric-ca-client-config.yaml? msp/
這時候可以用Admin@example.com的身份查看聯(lián)盟:
$ fabric-ca-client affiliation list -H `pwd`/fabric-ca-files/example.com/admin
2018/04/28 15:35:10 [INFO] 127.0.0.1:38172 GET /affiliations 201 0 "OK"
affiliation: com
? affiliation: com.example
? ? ? affiliation: com.example.org1
? ? ? affiliation: com.example.org2
最后需要將Admin@example.com的證書復制到example.com/msp/admincerts/
mkdir fabric-ca-files/example.com/msp/admincerts/
cp fabric-ca-files/example.com/admin/msp/signcerts/cert.pem? fabric-ca-files/example.com/msp/admincerts/
只有這樣,才能具備管理員權限盒至。
注冊org1.example.com的管理員Admin@org1.example.com
為org1.example.com的管理員Admin@org1.example.com準備一個目錄:
cd ~/fabric-deploy
mkdir -p ./fabric-ca-files/org1.example.com/admin
將fabric-ca-files/admin/fabric-ca-client-config.yaml其中的id部分修改為:
id:
? name: Admin@org1.example.com
? type: client
? affiliation: com.example.org1
? maxenrollments: 0
? attributes:
? ? - name: hf.Registrar.Roles
? ? ? value: client,orderer,peer,user
? ? - name: hf.Registrar.DelegateRoles
? ? ? value: client,orderer,peer,user
? ? - name: hf.Registrar.Attributes
? ? ? value: "*"
? ? - name: hf.GenCRL
? ? ? value: true
? ? - name: hf.Revoker
? ? ? value: true
? ? - name: hf.AffiliationMgr
? ? ? value: true
? ? - name: hf.IntermediateCA
? ? ? value: true
? ? - name: role
? ? ? value: admin
? ? ? ecert: true
注冊:
fabric-ca-client register -H `pwd`/fabric-ca-files/admin --id.secret=password
生成憑證:
$ fabric-ca-client enroll -u http://Admin@org1.example.com:password@localhost:7054? -H `pwd`/fabric-ca-files/org1.example.com/admin
$ ls ./fabric-ca-files/org1.example.com/admin
fabric-ca-client-config.yaml? msp/
查看聯(lián)盟:
$ fabric-ca-client affiliation list -H `pwd`/fabric-ca-files/org1.example.com/admin
2018/05/04 15:42:53 [INFO] 127.0.0.1:51298 GET /affiliations 201 0 "OK"
affiliation: com
? affiliation: com.example
? ? ? affiliation: com.example.org1
注意與Admin@example.com的區(qū)別酗洒,這里只能看到組織com.example.org1
將Admin@org1.example.com的證書復制到org1.example.com的msp/admincerts中:
mkdir fabric-ca-files/org1.example.com/msp/admincerts/
cp fabric-ca-files/org1.example.com/admin/msp/signcerts/cert.pem? fabric-ca-files/org1.example.com/msp/admincerts/
在Admin@org1.example.com中也需要創(chuàng)建msp/admincerts目錄士修,通過peer命令操作fabric的時候會要求admincerts存在:
mkdir fabric-ca-files/org1.example.com/admin/msp/admincerts/
cp fabric-ca-files/org1.example.com/admin/msp/signcerts/cert.pem? fabric-ca-files/org1.example.com/admin/msp/admincerts/
另外樱衷,這里沒有使用中間CA棋嘲,將intermediatecerts中的空文件刪除,否則peer會提示W(wǎng)arning:
rm fabric-ca-files/org1.example.com/admin/msp/intermediatecerts/*
注冊org2.example.com的管理員Admin@org2.example.com
為org2.example.com的管理員Admin@org2.example.com準備一個目錄:
cd ~/fabric-deploy
mkdir -p ./fabric-ca-files/org2.example.com/admin
將fabric-ca-files/admin/fabric-ca-client-config.yaml其中的id部分修改為:
id:
? name: Admin@org2.example.com
? type: client
? affiliation: com.example.org2
? maxenrollments: 0
? attributes:
? ? - name: hf.Registrar.Roles
? ? ? value: client,orderer,peer,user
? ? - name: hf.Registrar.DelegateRoles
? ? ? value: client,orderer,peer,user
? ? - name: hf.Registrar.Attributes
? ? ? value: "*"
? ? - name: hf.GenCRL
? ? ? value: true
? ? - name: hf.Revoker
? ? ? value: true
? ? - name: hf.AffiliationMgr
? ? ? value: true
? ? - name: hf.IntermediateCA
? ? ? value: true
? ? - name: role
? ? ? value: admin
? ? ? ecert: true
注冊:
fabric-ca-client register -H `pwd`/fabric-ca-files/admin --id.secret=password
生成憑證:
$ fabric-ca-client enroll -u http://Admin@org2.example.com:password@localhost:7054? -H `pwd`/fabric-ca-files/org2.example.com/admin
$ ls ./fabric-ca-files/org2.example.com/admin
fabric-ca-client-config.yaml? msp/
查看聯(lián)盟:
$ fabric-ca-client affiliation list -H `pwd`/fabric-ca-files/org2.example.com/admin
2018/05/02 16:49:00 [INFO] 127.0.0.1:50828 GET /affiliations 201 0 "OK"
affiliation: com
? affiliation: com.example
? ? ? affiliation: com.example.org2
Admin@org2.example.com只能看到組織com.example.org2矩桂。
將Admin@org2.example.com的證書復制到org2.example.com的msp/admincerts中:
mkdir fabric-ca-files/org2.example.com/msp/admincerts/
cp fabric-ca-files/org2.example.com/admin/msp/signcerts/cert.pem? fabric-ca-files/org2.example.com/msp/admincerts/
在Admin@org2.example.com中也需要創(chuàng)建msp/admincerts目錄沸移,通過peer命令操作fabric的時候會要求admincerts存在:
mkdir fabric-ca-files/org2.example.com/admin/msp/admincerts/
cp fabric-ca-files/org2.example.com/admin/msp/signcerts/cert.pem? fabric-ca-files/org2.example.com/admin/msp/admincerts/
另外,這里沒有使用中間CA侄榴,將intermediatecerts中的空文件刪除雹锣,否則peer會提示W(wǎng)arning:
rm fabric-ca-files/org2.example.com/admin/msp/intermediatecerts/*
各個組織分別使用自己的Admin賬戶創(chuàng)建其它賬號
example.com、org1.example.com癞蚕、org2.example.com三個組織這時候可以分別使用自己的Admin賬號創(chuàng)建子賬號蕊爵。
orderer.example.com
使用Admin@example.com注冊賬號orderer.example.com。注意這時候指定的目錄是fabric-ca-files/example.com/admin/桦山。
修改fabric-ca-files/example.com/admin/fabric-ca-client-config.yaml:
id:
? name: orderer.example.com
? type: orderer
? affiliation: com.example
? maxenrollments: 0
? attributes:
? ? - name: role
? ? ? value: orderer
? ? ? ecert: true
注冊以及生成憑證:
fabric-ca-client register -H `pwd`/fabric-ca-files/example.com/admin --id.secret=password
mkdir ./fabric-ca-files/example.com/orderer
fabric-ca-client enroll -u http://orderer.example.com:password@localhost:7054 -H `pwd`/fabric-ca-files/example.com/orderer
將Admin@example.com的證書復制到fabric-ca-files/example.com/orderer/msp/admincerts:
mkdir fabric-ca-files/example.com/orderer/msp/admincerts
cp fabric-ca-files/example.com/admin/msp/signcerts/cert.pem fabric-ca-files/example.com/orderer/msp/admincerts/
peer0.org1.example.com
使用Admin@org1.example.com注冊賬號peer0.org1.example.com攒射。這時候指定的目錄是fabric-ca-files/org1.example.com/admin/。
修改fabric-ca-files/org1.example.com/admin/fabric-ca-client-config.yaml:
id:
? name: peer0.org1.example.com
? type: peer
? affiliation: com.example.org1
? maxenrollments: 0
? attributes:
? ? - name: role
? ? ? value: peer
? ? ? ecert: true
注冊以及生成憑證:
fabric-ca-client register -H `pwd`/fabric-ca-files/org1.example.com/admin --id.secret=password
mkdir ./fabric-ca-files/org1.example.com/peer0
fabric-ca-client enroll -u http://peer0.org1.example.com:password@localhost:7054 -H `pwd`/fabric-ca-files/org1.example.com/peer0
將Admin@org1.example.com的證書復制到fabric-ca-files/org1.example.com/peer0/msp/admincerts:
mkdir fabric-ca-files/org1.example.com/peer0/msp/admincerts
cp fabric-ca-files/org1.example.com/admin/msp/signcerts/cert.pem fabric-ca-files/org1.example.com/peer0/msp/admincerts/
peer1.org1.example.com
使用Admin@org1.example.com注冊賬號peer1.org1.example.com恒水。這時候指定的目錄是fabric-ca-files/org1.example.com/admin/会放。
修改fabric-ca-files/org1.example.com/admin/fabric-ca-client-config.yaml:
id:
? name: peer1.org1.example.com
? type: peer
? affiliation: com.example.org1
? maxenrollments: 0
? attributes:
? ? - name: role
? ? ? value: peer
? ? ? ecert: true
注冊以及生成憑證:
fabric-ca-client register -H `pwd`/fabric-ca-files/org1.example.com/admin --id.secret=password
mkdir ./fabric-ca-files/org1.example.com/peer1
fabric-ca-client enroll -u http://peer1.org1.example.com:password@localhost:7054 -H `pwd`/fabric-ca-files/org1.example.com/peer1
將Admin@org1.example.com的證書復制到fabric-ca-files/org1.example.com/peer1/msp/admincerts:
mkdir fabric-ca-files/org1.example.com/peer1/msp/admincerts
cp fabric-ca-files/org1.example.com/admin/msp/signcerts/cert.pem fabric-ca-files/org1.example.com/peer1/msp/admincerts/
peer0.org2.example.com
使用Admin@org2.example.com注冊賬號peer0.org2.example.com。這時候指定的目錄是fabric-ca-files/org2.example.com/admin/钉凌。
修改fabric-ca-files/org2.example.com/admin/fabric-ca-client-config.yaml:
id:
? name: peer0.org2.example.com
? type: peer
? affiliation: com.example.org2
? maxenrollments: 0
? attributes:
? ? - name: role
? ? ? value: peer
? ? ? ecert: true
注冊以及生成憑證:
fabric-ca-client register -H `pwd`/fabric-ca-files/org2.example.com/admin --id.secret=password
mkdir ./fabric-ca-files/org2.example.com/peer0
fabric-ca-client enroll -u http://peer0.org2.example.com:password@localhost:7054 -H `pwd`/fabric-ca-files/org2.example.com/peer0
將Admin@org2.example.com的證書復制到fabric-ca-files/org2.example.com/peer0/msp/admincerts:
mkdir fabric-ca-files/org2.example.com/peer0/msp/admincerts
cp fabric-ca-files/org2.example.com/admin/msp/signcerts/cert.pem fabric-ca-files/org2.example.com/peer0/msp/admincerts/
重新部署
然后在hyperledger的fabric項目的全手動部署執(zhí)行結束后得到的fabric-deploy目錄基礎上咧最,進行下面的操作。
修改configtx.yaml御雕,將其中的msp路徑修改為通過fabric-ca創(chuàng)建的msp目錄:
Profiles:
? ? TwoOrgsOrdererGenesis:
? ? ? ? Orderer:
? ? ? ? ? ? <<: *OrdererDefaults
? ? ? ? ? ? Organizations:
? ? ? ? ? ? ? ? - *OrdererOrg
? ? ? ? Consortiums:
? ? ? ? ? ? SampleConsortium:
? ? ? ? ? ? ? ? Organizations:
? ? ? ? ? ? ? ? ? ? - *Org1
? ? ? ? ? ? ? ? ? ? - *Org2
? ? TwoOrgsChannel:
? ? ? ? Consortium: SampleConsortium
? ? ? ? Application:
? ? ? ? ? ? <<: *ApplicationDefaults
? ? ? ? ? ? Organizations:
? ? ? ? ? ? ? ? - *Org1
? ? ? ? ? ? ? ? - *Org2
Organizations:
? ? - &OrdererOrg
? ? ? ? Name: OrdererOrg
? ? ? ? ID: OrdererMSP
? ? ? ? MSPDir: ./fabric-ca-files/example.com/msp
? ? - &Org1
? ? ? ? Name: Org1MSP
? ? ? ? ID: Org1MSP
? ? ? ? MSPDir: ./fabric-ca-files/org1.example.com/msp
? ? ? ? AnchorPeers:
? ? ? ? ? ? - Host: peer0.org1.example.com
? ? ? ? ? ? ? Port: 7051
? ? - &Org2
? ? ? ? Name: Org2MSP
? ? ? ? ID: Org2MSP
? ? ? ? MSPDir: ./fabric-ca-files/org2.example.com/msp
? ? ? ? AnchorPeers:
? ? ? ? ? ? - Host: peer0.org2.example.com
? ? ? ? ? ? ? Port: 7051
Orderer: &OrdererDefaults
? ? OrdererType: solo
? ? Addresses:
? ? ? ? - orderer.example.com:7050
? ? BatchTimeout: 2s
? ? BatchSize:
? ? ? ? MaxMessageCount: 10
? ? ? ? AbsoluteMaxBytes: 99 MB
? ? ? ? PreferredMaxBytes: 512 KB
? ? Kafka:
? ? ? ? Brokers:
? ? ? ? ? ? - 127.0.0.1:9092
? ? Organizations:
Application: &ApplicationDefaults
? ? Organizations:
注意configtx.yaml中使用的每個組織的msp窗市,不是組件的或者用戶的。這個文件備用饮笛。
更新orderer.example.com/中的msp:
rm -rf orderer.example.com/msp/
cp -rf fabric-ca-files/example.com/orderer/msp orderer.example.com/
更新peer0.org1.example.com的msp:
rm -rf peer0.org1.example.com/msp/
cp -rf fabric-ca-files/org1.example.com/peer0/msp? peer0.org1.example.com/
更新peer1.org1.example.com的msp:
rm -rf peer1.org1.example.com/msp/
cp -rf fabric-ca-files/org1.example.com/peer1/msp? peer1.org1.example.com/
更新peer0.org2.example.com的msp:
rm -rf peer0.org2.example.com/msp/
cp -rf fabric-ca-files/org2.example.com/peer0/msp? peer0.org2.example.com/
然后重新部署下面的組件,參考hyperledger的fabric項目的全手動部署: 開始部署论熙。
scp -r orderer.example.com/*? ? root@192.168.88.10:/opt/app/fabric/orderer/
scp -r peer0.org1.example.com/*? root@192.168.88.10:/opt/app/fabric/peer/
scp -r peer1.org1.example.com/*? root@192.168.88.11:/opt/app/fabric/peer/
scp -r peer0.org2.example.com/*? root@192.168.88.12:/opt/app/fabric/peer/
重新部署的時候福青,注意將之前已經(jīng)啟動的服務停止,并刪除安裝文件脓诡。
重新部署完成后无午,重新生成./genesisblock文件,并上傳到orderer.example.com的安裝路徑中:
./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./genesisblock
這里沒有使用中間CA祝谚,生成genesisblock的時候宪迟,會提示:
2018-05-04 16:37:17.788 CST [msp] getPemMaterialFromDir -> WARN 002 Failed reading file /root/fabric-deploy/fabric-ca-files/example.com/msp/intermediatecerts/localhost-7054.pem: no pem content for file /root/fabric-deploy/fabric-ca-files/example.com/msp/intermediatecerts/localhost-7054.pem
將intermediatecerts中的文件刪除即可,
rm fabric-ca-files/example.com/msp/intermediatecerts/localhost-7054.pem
rm fabric-ca-files/org1.example.com/msp/intermediatecerts/localhost-7054.pem
rm fabric-ca-files/org2.example.com/msp/intermediatecerts/localhost-7054.pem
如果是通過intermediateCA生成的證書交惯,intermediatecerts中包含中間CA的證書次泽。這里只部署了一個fabric-ca作為rootCA穿仪,因此intermediatecerts中是一個空文件。
將生成的genesisblock上傳到orderer.example.com:
scp genesisblock root@192.168.88.10:/opt/app/fabric/orderer/
可以用下面的命令查看創(chuàng)始塊的內(nèi)容:
./bin/configtxgen? -inspectBlock genesisblock
然后重新啟動fabric的所有組件意荤。
更新用戶的證書以及后續(xù)操作
因為我們是在hyperledger的fabric項目的全手動部署執(zhí)行結束后得到的fabric-deploy目錄基礎上啊片,進行操作的。
所有還要更新一下該目錄下用戶目錄中的msp:
$ rm -rf Admin\@org1.example.com/msp
$ cp -rf fabric-ca-files/org1.example.com/admin/msp Admin\@org1.example.com/
$ cd Admin\@org1.example.com
$ ./peer.sh node status
status:STARTED
2018-05-04 17:03:06.202 CST [main] main -> INFO 001 Exiting.....
$ cd ../
$ rm -rf Admin\@org2.example.com/msp
$ cp -rf fabric-ca-files/org2.example.com/admin/msp Admin\@org2.example.com/
$ cd Admin\@org2.example.com
$ ./peer.sh node status
status:STARTED
2018-05-04 17:08:27.959 CST [main] main -> INFO 001 Exiting.....
重新創(chuàng)建channel玖像,設置anchor peer:
./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx mychannel.tx -channelID mychannel
./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
cd Admin\@org1.example.com/
./peer.sh channel create -o orderer.example.com:7050 -c mychannel -f ../mychannel.tx --tls true --cafile tlsca.example.com-cert.pem
cp mychannel.block ../Admin\@org2.example.com/
./peer.sh channel join -b mychannel.block
./peer.sh channel join -b mychannel.block? //將peer.sh中的peer0修改為peer1后在執(zhí)行一次
./peer.sh channel update -o orderer.example.com:7050 -c mychannel -f ../Org1MSPanchors.tx --tls true --cafile ./tlsca.example.com-cert.pem
cd ../Admin\@org2.example.com/
./peer.sh channel join -b mychannel.block
./peer.sh channel update -o orderer.example.com:7050 -c mychannel -f ../Org2MSPanchors.tx --tls true --cafile ./tlsca.example.com-cert.pem
這些操作的含義見:?hyperledger的fabric項目的全手動部署-創(chuàng)建channel與peer的設置
后續(xù)的合約創(chuàng)建紫谷、更新、調(diào)用等操作這里就不演示了捐寥,請直接查看:?hyperledger的fabric項目的全手動部署:安裝合約:
go get github.com/lijiaocn/fabric-chaincode-example/demo
./peer.sh chaincode package demo-pack.out -n demo -v 0.0.1 -s -S -p github.com/lijiaocn/fabric-chaincode-example/demo
./peer.sh chaincode signpackage demo-pack.out signed-demo-pack.out
./peer.sh chaincode install ./signed-demo-pack.out
./peer.sh chaincode instantiate -o orderer.example.com:7050 --tls true --cafile ./tlsca.example.com-cert.pem -C mychannel -n demo -v 0.0.1 -c '{"Args":["init"]}' -P "OR('Org1MSP.member','Org2MSP.member')"
./peer.sh chaincode query -C mychannel -n demox -c '{"Args":["attr","role"]}'
./peer.sh chaincode query -C mychannel -n demox -c '{"Args":["attr","hf.Type"]}'
原文地址?https://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/05/04/fabric-ca-example.html