Hyperledger Fabric入門實戰(七)——Fabric-CA的介紹

1. Fabric 賬號

1.1 Fabric賬號

  • Fabric賬號

    1. 賬號是什麼?

      Fabric中的賬號實際上是根據PKI規範生成的一組證書和祕鑰文件

    2. fabric中賬號的作用

      • 保證記錄在區塊鏈中的數據具有不可逆、不可篡改
      • Fabric中每條交易都會加上發起者的標籤(簽名證書),同時用發起人的私鑰進行加密
      • 如果交易需要其他組織的節點提供背書功能,那麼背書節點也會在交易中加入自己的簽名
    # Fabric中的完整賬號結構
    .
    ├── [email protected]
    │   ├── msp
    │   │   ├── admincerts
    │   │   │   └── [email protected]
    │   │   ├── cacerts
    │   │   │   └── ca.orggo.zjnu.com-cert.pem
    │   │   ├── keystore
    │   │   │   └── a2f15f92d1b1733a9a901aa4e6fa6d5910248a967b13a00521ba26068a2bc592_sk
    │   │   ├── signcerts
    │   │   │   └── [email protected]
    │   │   └── tlscacerts
    │   │       └── tlsca.orggo.zjnu.com-cert.pem
    │   └── tls
    │       ├── ca.crt
    │       ├── client.crt
    │       └── client.key
    ├── [email protected]
    │   ├── msp
    │   │   ├── admincerts
    │   │   │   └── [email protected]
    │   │   ├── cacerts
    │   │   │   └── ca.orggo.zjnu.com-cert.pem
    │   │   ├── keystore
    │   │   │   └── 889f0029925920dcff610239140bda797e102cda8072a89e2f46c4798bdb5c1d_sk
    │   │   ├── signcerts
    │   │   │   └── [email protected]
    │   │   └── tlscacerts
    │   │       └── tlsca.orggo.zjnu.com-cert.pem
    │   └── tls
    │       ├── ca.crt
    │       ├── client.crt
    │       └── client.key
    
    • msp文件夾中內容中主要存放簽名用的證書文件和加密用的私鑰文件。
      • admincerts:管理員證書。
      • cacerts:根CA服務器的證書。
      • keystore:節點或者賬號的私鑰。
      • signcerts:符合x.509的節點或者用戶證書文件。
      • tlscacerts:TLS根CA的證書。
    • tls 文件夾中存放加密通信相關的證書文件。

1.2 什麼地方需要 Fabric 賬號

  • 啓動orderer

    啓動orderer的時候我們需要通過環境變量或者配置文件給當前啓動的Orderer設定相應的賬號。

    # 環境變量賬號: -> 該路徑爲宿主機上的路徑, 非docker啓動的orderer節點內部掛載路徑
    ORDERER_GENERAL_LOCALMSPDIR=./crypto-config/ordererOrganizations/zjnu.com/orderers/orderer.zjnu.com/msp
    # 賬號目錄信息
    $ tree msp/
    msp/
    ├── admincerts
    │   └── [email protected]
    ├── cacerts
    │   └── ca.zjnu.com-cert.pem
    ├── keystore
    │   └── 4968fd5b3fa14639ba61ec97f745b2e0ce5592e54838493d965a08ac7ad1c8e7_sk
    ├── signcerts
    │   └── orderer.zjnu.com-cert.pem
    └── tlscacerts
        └── tlsca.zjnu.com-cert.pem
    
  • 啓動peer

    啓動peer的時候我們需要通過環境變量或者配置文件給當前啓動的peer設定相應的賬號。

    # 環境變量賬號: -> 該路徑爲宿主機上的路徑, 非docker啓動的orderer節點內部掛載路徑
    CORE_PEER_MSPCONFIGPATH=crypto-config/peerOrganizations/orggo.zjnu.com/peers/peer0.zjnu.itcast.com/msp
    # 賬號目錄信息
    $ tree msp/
    msp/
    ├── admincerts
    │   └── [email protected]
    ├── cacerts
    │   └── ca.orggo.zjnu.com-cert.pem
    ├── config.yaml
    ├── keystore
    │   └── a3a19feb11cac708a038d115d26cf96247bcc5821bca3f2b8e9d07847604268b_sk
    ├── signcerts
    │   └── peer0.orggo.zjnu.com-cert.pem
    └── tlscacerts
        └── tlsca.orggo.zjnu.com-cert.pem
    
  • 創建channel

    channel是fabric中的重要組成部分, 創建channel也是需要賬號的.

    # 環境變量賬號: -> 該路徑爲宿主機上的路徑, 非docker啓動的orderer節點內部掛載路徑
    # 在客戶端中做的, 客戶端要有一個用戶的賬號信息
    CORE_PEER_MSPCONFIGPATH=crypto-config/peerOrganizations/orggo.zjnu.com/users/[email protected]/msp
    # 賬號目錄信息
    $ tree msp/
    msp/
    ├── admincerts
    │   └── [email protected]
    ├── cacerts
    │   └── ca.orggo.zjnu.com-cert.pem
    ├── keystore
    │   └── a2f15f92d1b1733a9a901aa4e6fa6d5910248a967b13a00521ba26068a2bc592_sk
    ├── signcerts
    │   └── [email protected]
    └── tlscacerts
        └── tlsca.orggo.zjnu.com-cert.pem
    

通過上邊的內容我們可以發現這些賬號的內容是一樣的, 都包含是5個不同的文件, 但是仔細觀察會發現在文件路徑上還是有一些區別的。我們來對比一下:

# Orderer 啓動路徑
crypto-config/ordererOrganizations/itcast.com/orderers/orderer.itcast.com/msp
# Peer啓動的賬號路徑
crypto-config/peerOrganizations/orggo.itcast.com/peers/peer0.orggo.itcast.com/msp
# 創建channel的賬號路徑
crypto-config/peerOrganizations/orggo.itcast.com/users/[email protected]/msp

我們可以發現Peer和Orderer都有屬於自己的賬號,創建Channel使用的是用戶賬號。其中Peer和創建Channel的用戶賬號屬於某個組織,而Orderer的啓動賬號只屬於他自己。這裏特別注意,用戶賬號在很多操作中都會用到,而且很多操作的錯誤都是用戶賬號的路徑設置不當而引起的。

1.3 Fabric-ca

fabric-ca 項目是專門爲了解決Fabric賬號問題而發起的一個開源項目, 它非常完美的解決了fabric賬號生成的問題。fabric-ca項目由 fabric-server 和fabric-client這兩個模塊組成。其中fabric-server在 fabric中佔有非常重要的作用。我們使用cryptogen命令可以同配置文件生成一些賬號信息, 但是如果有動態添加賬號的需求, 就無法滿足, 所以這個時候我們就應該在項目中引入fabric-ca。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-62761Yqj-1586783193113)(assets/1542288702905.png)]

上圖中Fabric CA提供了兩種訪問方式調用Server服務

  • 通過Fabric-Client調用
  • 通過SDK調用 (node.js,java, go)

通常情況下, 一個組織會對應一個fabric-server服務器, 下面介紹如何將fabric-server加入到網絡中

在一個fabric中有多個組織, fabric-Ca如何部署?

  • 要在每個組織中部署一個fabric-ca服務器, 給當前組織註冊新用戶

1.3.1 將fabric-ca加入到網絡

在docker-compose啓動使用的配置文件docker-compos.yam中添加如下配置項:


services:
###################### 添加的內容 - START #########################
  cago.zjnu.com: # -> fabric-ca的服務器名, 隨便起名
    image: hyperledger/fabric-ca:latest # fabric-ca的鏡像文件
    environment:
      # fabric-ca容器中的home目錄
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=cago.zjnu.com	# fabric-ca服務器的名字, 自己起
      # fabric-ca服務器證書文件目錄中的證書文件
      # 明確當前fabric-ca屬於哪個組織
      - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.orggo.zjnu.com-cert.pem
      # fabric-ca服務器的私鑰文件
      - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/0445f3d2287580194cb96060b644e560627b180315444fe2c17cbbbfda281c8a_sk

    ports:
      - 7054:7054	# fabric-ca服務器綁定的端口
    # 啓動fabric-ca-server服務
    # admin:123456
    #  -- admin: fabric-ca-server的登錄用戶名
    #  -- 123456: fabric-ca-server的登錄密碼
    command: sh -c 'fabric-ca-server start -b admin:123456'
    volumes:
      - ./crypto-config/peerOrganizations/orggo.zjnu.com/ca/:/etc/hyperledger/fabric-ca-server-config
    container_name: cago.zjnu.com	# 容器名, 自己指定
    networks:
      - byfn	# 工作的網絡
      
 cacpp.zjnu.com: # -> fabric-ca的服務器名, 隨便起名
    image: hyperledger/fabric-ca:latest # fabric-ca的鏡像文件
    environment:
    	# fabric-ca容器中的home目錄
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=cacpp.zjnu.com	# fabric-ca服務器的名字, 自己起
      # fabric-ca服務器證書文件目錄中的證書文件
      # 明確當前fabric-ca屬於哪個組織
      - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.orgcpp.zjnu.com-cert.pem
      # fabric-ca服務器的私鑰文件
      - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/eec404e69e144a435abc14caaff1a7adac42f5b63f0a745e22e53fca15ee4adb_sk

    ports:
      - 8054:7054	# fabric-ca服務器綁定的端口
    # 啓動fabric-ca-server服務
    # admin:123456
    #  -- admin: fabric-ca-server的登錄用戶名
    #  -- 123456: fabric-ca-server的登錄密碼
    command: sh -c 'fabric-ca-server start -b admin:123456'
    volumes:
      - ./crypto-config/peerOrganizations/orgcpp.zjnu.com/ca/:/etc/hyperledger/fabric-ca-server-config
    container_name: cacpp.zjnu.com	# 容器名, 自己指定
    networks:
      - byfn	# 工作的網絡
###################### 添加的內容 - END #########################

在這裏插入圖片描述
在這裏插入圖片描述

1.3.2 編寫node.js客戶端

  • 初始化node.js項目(在服務器中創建任意一個目錄然後進入裏面執行下面的代碼)

    # 創建一個編寫node.js客戶端的目錄, 並進入
    # 1. 執行npm init 生成package.json文件, 用於保存更新項目依賴的第三方模塊
    #    要求輸入的信息, 如果你懶, 直接回車就可以了
    # package.json配置說明: https://blog.csdn.net/Aurora100/article/details/78590346
    $ npm init
    This utility will walk you through creating a package.json file.
    It only covers the most common items, and tries to guess sensible defaults.
    
    See `npm help json` for definitive documentation on these fields
    and exactly what they do.
    
    Use `npm install <pkg>` afterwards to install a package and
    save it as a dependency in the package.json file.
    
    Press ^C at any time to quit.
    package name: (nodejs) 
    version: (1.0.0) 
    description: 
    entry point: (index.js) 
    test command: 
    git repository: 
    keywords: 
    author: 
    license: (ISC) 
    About to write to /home/itcast/nodejs/package.json:
    
    {
      "name": "nodejs",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    
    
    Is this ok? (yes) 
    
    # 接下來執行如下命令, 安裝第三方依賴庫:
    npm install --save fabric-ca-client
    npm install --save fabric-client
    npm install --save grpc
    # 安裝過程中, 提示如下log信息, 無需理會
    npm WARN [email protected] No description
    npm WARN [email protected] No repository field.
    
  • 客戶端參考API

    https://hyperledger.github.io/fabric-sdk-node/
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章