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
- 根域名:ydqy.com
- 兩個組織: 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