一、Fabric賬號
1.1 什麼是賬號
Fabric賬號由cryptogen
命令負責生成。實際上,Fabric賬號由一組證書和祕鑰文件所組成。
下面是orderer節點賬號的目錄結構:
├── orderers
│ │ └── orderer.example.com
│ │ ├── msp
│ │ │ ├── admincerts # 管理員證書
│ │ │ │ └── [email protected]
│ │ │ ├── cacerts # 根ca服務器的證書
│ │ │ │ └── ca.example.com-cert.pem
│ │ │ ├── keystore # 節點或者賬號的私鑰
│ │ │ │ └── e5eb3e35f3a4fcc95d1c084b2abdb233dec556d0b715742c99e7d0d528ad7d40_sk
│ │ │ ├── signcerts # 符合x.509的節點或者用戶證書文件
│ │ │ │ └── orderer.example.com-cert.pem
│ │ │ └── tlscacerts # tls根ca證書
│ │ │ └── tlsca.example.com-cert.pem
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── server.crt
│ │ └── server.key
從上面可以看出,這些證書分別存放在msp
文件夾和tls
文件夾中。msp文件夾中存放了簽名時使用的證書文件和加密時使用的祕鑰文件。tls文件夾存放了加密通信相關的證書文件。
1.2 什麼地方需要使用賬號
創建fabric網絡時主要有以下幾個地方需要使用到賬號:
- 啓動orderer節點
啓動orderer的時候我們需要通過環境變量或者配置文件給當前啓動的Orderer設定相應的賬號。
# 啓動Orderer節點的賬號路徑
ORDERER_GENERAL_LOCALMSPDIR=/home/zhongliwen/testwork/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp
- 啓動peer節點
啓動peer的時候我們需要通過環境變量或者配置文件給當前啓動的peer設定相應的賬號。
# 啓動peer節點的賬號路徑
ORE_PEER_MSPCONFIGPATH=/home/zhongliwen/testwork/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp
- 創建通道
# 創建通道的賬號路徑
CORE_PEER_MSPCONFIGPATH=/home/zhongliwen/testwork/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp
從上面配置可以發現,orderer、peer、user都有自己的賬號信息。啓動orderer使用orderer節點的賬號,啓動peer使用了peer節點的賬號,創建channel使用了組織用戶的賬號。
1.3 Fabric-CA
1.3.1 簡介
fabric-ca 項目是專門爲了解決Fabric賬號問題而發起的一個開源項目, 它非常完美的解決了fabric賬號生成的問題。
fabric-ca項目由 fabric-server 和fabric-client這兩個模塊組成。fabric-server是服務端程序,fabric-client是客戶端程序。Fabric CA提供了兩種訪問方式調用Server服務,一種是通過Fabric-client程序,另外一種是使用sdk(nodejs、java、go等等)執行調用。
1.3.2 配置fabric-ca
hyperledger-fabric項目已經自帶了fabric-ca的功能。所以,如果要創建ca服務器,只需要在docker-compose.yaml文件的services節點下添加以下內容:
# 配置ca服務器容器
ca.example.com: # 服務名稱
image: hyperledger/fabric-ca:latest # 鏡像名稱:版本號
environment:
# ca容器的home目錄
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
# ca服務器的名字,自己起
- FABRIC_CA_SERVER_CA_NAME=ca.example.com
# ca服務器所屬組織的證書路徑
- FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
# ca服務器的私鑰文件路徑
- FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/b47b6db60368e6e5f598a9002f4c8f93c3d36d7c25d83b4e55338c671bed9ed2_sk
ports:
- "7054:7054" # ca服務器綁定端口
command: sh -c 'fabric-ca-server start -b admin:123456' # 啓動fabric-ca-server服務的命令,-b參數爲ca服務器登錄的用戶名和密碼
volumes: # 數據卷掛載
- ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
container_name: ca.example.com # 容器名稱,自己起
networks:
- byfn # 工作網絡
通常情況下, 一個組織會對應一個fabric-server服務器。所以在我們例子中啓動了兩個ca服務,對應org1和org2兩個組織。
1.3.3 nodejs客戶端開發
下面通過nodejs實現fabric用戶的創建、查詢操作。
第一步:創建項目。
mkdir fabric-ca-test
cd fabric-ca-test
npm init
第二步:安裝包。
npm install --save fabric-ca-client
npm install --save fabric-client
npm install --save grpc
第三步:從github.com上下載示例文件,並拷貝到fabric-ca-test目錄中。
enrollAdmin.js:註冊組織管理員;
enrollUser.js:註冊組織的普通會員,註冊前必須完成管理員賬號的註冊;
query.js:查詢數據(關閉了tls功能);
query_tls.js:查詢數據(開啓了tls功能);
invoke.js:執行交易(關閉了tls功能);
invoke_tls.js:執行交易(開啓了tls功能);
第四步:根據實際情況修改js文件的options配置信息(比如ip地址、用戶ID等等)。
第五步:通過node xxx.js
命令執行相關操作。
# 註冊管理員
node enrollAdmin.js
# 註冊用戶
node registUser.js
# 查詢a的值
node query.js
# 查詢a的值(啓動了tls功能)
node query_tls.js
# a向b轉賬10
node invoke.js
# a向b轉賬10(啓動了tls功能)
node invoke_tls.js