1. 程式人生 > >05.Fabric核心模組之Cryptogen解析

05.Fabric核心模組之Cryptogen解析

陳述

主要講Fabric核心模組中cryptogen的功能模組相關操作以及配置檔案

Cryptogen

cryptogen模組主要用來生成組織結構和賬號相關的檔案,任何Fabric系統的開發通常都是從cryptogen模組開始的。在Fabric專案中,當系統設計完成之後第一項工作就是根據系統的設計來編寫cryptogen的配置檔案,然後通過這些配置檔案生成相關的證書檔案。

Cryptogen模組所使用的配置檔案是整個Fabric專案的基石。
Cryptogen模組所使用的配置檔案是整個Fabric專案的基石。
Cryptogen模組所使用的配置檔案是整個Fabric專案的基石。

Cryptogen模組命令

cryptogen模組是通過命令列的方式執行的,一個cryptogen命令由命令列引數和配置檔案兩部分組成,通過執行命令cryptogen --help可以顯示cryptogen模組的命令列選項,執行結果如下所示:

$ cryptogen --help
usage: cryptogen [<flags>] <command> [<args> ...]
Utility for generating Hyperledger Fabric key material
Flags:
  --help  Show context-sensitive help
(also try --help-long and --help-man). Commands: # 顯示幫助資訊 `help [<command>...] # 根據配置檔案生成證書資訊。 `generate [<flags>] # 顯示系統預設的cryptogen模組配置檔案資訊 `showtemplate # 顯示當前模組版本號 `version` # 擴充套件現有網路 `extend [<flags>]

Cryptogen模組配置檔案

Cryptogen模組的配置檔案用來描述需要生成的證書檔案的特性,比如:有多少個組織有多少個節點,需要多少個賬號等。這裡我們通過一個cryptogen模組配置檔案的具體例子來初步瞭解配置檔案的結構,該例子是Fabric原始碼中自帶的示例 - crypto-config.yaml:

這個配置檔案的名字可以根據自己的意願進行自定義, 即: xxx.yaml

OrdererOrgs:					# 排序節點的組織定義
  - Name: Orderer				# orderer節點的名稱
 	Domain: example.com			# orderer節點的根域名 
 	Specs:
	    - Hostname: orderer		# orderer節點的主機名
PeerOrgs:						# peer節點的組織定義
  - Name: Org1					# 組織1的名稱
	Domain: org1.example.com	# 組織1的根域名
 	EnableNodeOUs: true			# 是否支援node.js
 	Template:					
	    Count: 2				# 組織1中的節點(peer)數目
	Users:
 	    Count: 1				# 組織1中的使用者數目
  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: true
    Template:
        Count: 2
    Users:
        Count: 1

說明

上述模板檔案定義了一個orderer節點,這個orderer節點的名字為orderer,orderer節點的根域名為example.com,主機名為orderer。模板檔案同時定義了兩個組織,兩個組織的名字分別為org1 和 org2,其中組織 org1 包含了2個節點和1個使用者,組織 org2 包含2個點和1個使用者。

除了Fabric原始碼中提供的例子,還可以通過命令cryptogen showtemplate獲取預設的模板檔案,在實際專案中稍加修改這些預設的模板檔案即可使用。

生成證書檔案

在任意目錄下建立一個新的目錄如: MyTestNetWork, 在該目錄下左如下操作:

  • 編寫yaml配置檔案 - crypto-config.yaml
    • 一個排序節點: orader
    • 兩個組織: java, go
      • go
        • peer節點數: 3個
        • 使用者個數: 2個
        • 根域名:go.ydqy.com
      • java
        • peer節點數: 3個
        • 使用者個數: 2個
        • 根域名: java.ydqy.com

命令

# 根據預設模板在對應目錄下生成證書
$ cryptogen generate
# 根據指定的模板在指定目錄下生成證書
$ cryptogen generate --config=./crycrypto-config.yaml --output ./crypto-config
	--config: 指定配置檔案
	--output: 指定證書檔案的儲存位置, 可以不指定。會在對應路徑生成目錄,預設名字為:crypto-config

Fabric證書檔案結構

  • orderer節點

    # 檢視TestNetWork目錄
    [email protected]:~/TestNetWork$ tree -L 2
    .
    ├── crypto-config
    │   ├── ordererOrganizations	# orderer節點相關的證書檔案
    │   └── peerOrganizations		# 組織相關的證書檔案(組織的節點數, 使用者數等證書檔案)
    └── crypto-config.yaml			# 配置檔案
    
    # 檢視排序節點的證書目錄, 進入到 ordererOrganizations 子目錄中
    [email protected]:ordererOrganizations$ tree -L 4
    .
    └── ydqy.com	# 根域名為ydqy.com的orderer節點的相關證書檔案
        ├── ca	# CA伺服器的簽名檔案
        │   ├── 94db924d3be00c5adda6ac3c3cb7a5f8b80868681c3dd04b58c2920cdf56fdc7_sk
        │   └── ca.ydqy.com-cert.pem
        ├── msp
        │   ├── admincerts	# orderer管理員的證書
        │   │   └── [email protected]
        │   ├── cacerts		# orderer根域名伺服器的簽名證書
        │   │   └── ca.ydqy.com-cert.pem
        │   └── tlscacerts	# tls連線用的身份證書
        │       └── tlsca.ydqy.com-cert.pem
        ├── orderers	# orderer節點需要的相關的證書檔案
        │   └── ubuntu.ydqy.com
        │       ├── msp	# orderer節點相關證書
        │       └── tls	# orderer節點和其他節點連線用的身份證書
        ├── tlsca
        │   ├── de45aeb112ee820197f7d4d475f2edbeb1705d53a690f3537dd794b66de1d6ba_sk
        │   └── tlsca.ydqy.com-cert.pem
        └── users	# orderer節點使用者相關的證書
            └── [email protected]
                ├── msp
                └── tls
    

    在實際開發中orderer節點這些證書其實不需要直接使用, 只是在orderer節點啟動時指明專案的位置即可。

  • Peer節點

    進入到 peerOrganizations 子目錄中, 我們詳細介紹這些證書的種類和作用。由於每個組織的目錄結構都是一樣的, 所以我們只對其中一個組織的目錄進行詳細介紹。

    # 檢視 peerOrganizations 子目錄中內容
    [email protected]:peerOrganizations$ tree -L 1
    .
    ├── go.ydqy.com		# go組織
    └── java.ydqy.com		# java組織
    # 進入go.ydqy.com 組織目錄中
    [email protected]:go.ydqy.com$ tree -L 4
    .
    ├── ca 	# 根節點簽名證書
    │   ├── 4a367bf9e43142846e7c851830f69f72483ecb7a6def7c782278a9808bbb5fb0_sk
    │   └── ca.go.ydqy.com-cert.pem
    ├── msp	
    │   ├── admincerts	# 組織管理員的證書
    │   │   └── [email protected]
    │   ├── cacerts		# 組織的根證書
    │   │   └── ca.go.ydqy.com-cert.pem
    │   ├── config.yaml
    │   └── tlscacerts	# TLS連線身份證書
    │       └── tlsca.go.ydqy.com-cert.pem
    ├── peers
    │   ├── peer0.go.ydqy.com
    │   │   ├── msp
    │   │   │   ├── admincerts	# 組織的管理證書, 建立通道必須要有該證書
    │   │   │   ├── cacerts		# 組織根證書
    │   │   │   ├── config.yaml	
    │   │   │   ├── keystore	# 當前節點的私鑰
    │   │   │   ├── signcerts	# 當前節點簽名的數字證書
    │   │   │   └── tlscacerts	# tls連線的身份證書
    │   │   └── tls
    │   │       ├── ca.crt		# 組織的根證書
    │   │       ├── server.crt	# 驗證本節點簽名的證書
    │   │       └── server.key	# 當前節點的私鑰
    │   ├── peer1.go.ydqy.com
    │   │   ├── msp
    │   │   │   ├── admincerts
    │   │   │   ├── cacerts
    │   │   │   ├── config.yaml
    │   │   │   ├── keystore
    │   │   │   ├── signcerts
    │   │   │   └── tlscacerts
    │   │   └── tls
    │   │       ├── ca.crt
    │   │       ├── server.crt
    │   │       └── server.key
    │   └── peer2.go.ydqy.com
    │       ├── msp
    │       │   ├── admincerts
    │       │   ├── cacerts
    │       │   ├── config.yaml
    │       │   ├── keystore
    │       │   ├── signcerts
    │       │   └── tlscacerts
    │       └── tls
    │           ├── ca.crt
    │           ├── server.crt
    │           └── server.key
    ├── tlsca
    │   ├── 3273887b1da2f27a6cbad3ac4acb0379df3d7858e0553a91fb9acb93da50b670_sk
    │   └── tlsca.go.ydqy.com-cert.pem
    └── users
        ├── [email protected]
        │   ├── msp
        │   │   ├── admincerts	# 組織的根證書, 作為管理身份的驗證
        │   │   ├── cacerts		# 使用者所屬組織的根證書
        │   │   ├── keystore	# 使用者私鑰
        │   │   ├── signcerts	# 使用者的簽名證書
        │   │   └── tlscacerts	# tls連線通訊證書, sdk客戶端使用
        │   └── tls
        │       ├── ca.crt		# 組織的根證書
        │       ├── client.crt	# 客戶端身份的證書
        │       └── client.key	# 客戶端的私鑰
        ├── [email protected]
        │   ├── msp
        │   │   ├── admincerts
        │   │   ├── cacerts
        │   │   ├── keystore
        │   │   ├── signcerts
        │   │   └── tlscacerts
        │   └── tls
        │       ├── ca.crt
        │       ├── client.crt
        │       └── client.key
        └── [email protected]
            ├── msp
            │   ├── admincerts
            │   ├── cacerts
            │   ├── keystore
            │   ├── signcerts
            │   └── tlscacerts
            └── tls
                ├── ca.crt
                ├── client.crt
                └── client.key