超級賬本HyperLedger視頻教程:Fabric-CA的使用演示(兩個組織一個Orderer三個Peer)

說明

啟動fabric-ca

生成fabric-ca admin的憑證

創(chuàng)建聯(lián)盟

為每個組織準備msp

注冊example.com的管理員Admin@example.com

注冊org1.example.com的管理員Admin@org1.example.com

注冊org2.example.com的管理員Admin@org2.example.com

各個組織分別使用自己的Admin賬戶創(chuàng)建其它賬號

orderer.example.com

peer0.org1.example.com

peer1.org1.example.com

peer0.org2.example.com

重新部署

更新用戶的證書以及后續(xù)操作

參考

說明

超級賬本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

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笤昨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子握恳,更是在濱河造成了極大的恐慌瞒窒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睡互,死亡現(xiàn)場離奇詭異根竿,居然都是意外死亡,警方通過查閱死者的電腦和手機就珠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門寇壳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人妻怎,你說我怎么就攤上這事壳炎。” “怎么了逼侦?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵匿辩,是天一觀的道長。 經(jīng)常有香客問我榛丢,道長铲球,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任晰赞,我火速辦了婚禮稼病,結果婚禮上,老公的妹妹穿的比我還像新娘掖鱼。我一直安慰自己然走,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布戏挡。 她就那樣靜靜地躺著芍瑞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪褐墅。 梳的紋絲不亂的頭發(fā)上拆檬,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天洪己,我揣著相機與錄音,去河邊找鬼秩仆。 笑死码泛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的澄耍。 我是一名探鬼主播噪珊,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼齐莲!你這毒婦竟也來了痢站?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤选酗,失蹤者是張志新(化名)和其女友劉穎阵难,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芒填,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡呜叫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了殿衰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朱庆。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闷祥,靈堂內(nèi)的尸體忽然破棺而出娱颊,到底是詐尸還是另有隱情,我是刑警寧澤凯砍,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布箱硕,位于F島的核電站悟衩,受9級特大地震影響剧罩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜座泳,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一斑响、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钳榨,春花似錦、人聲如沸纽门。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏陵。三九已至饼齿,卻和暖如春饲漾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缕溉。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工考传, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人证鸥。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓僚楞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親枉层。 傳聞我的和親對象是個殘疾皇子泉褐,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容