在前面的文章中,我們分析了Fabric的架構,把Fabric系統看成由不同的邏輯結構組成。其中MSP是一個邏輯結構,主要的功能是承擔權限管理。
fabric架構
那么,MSP是什么?它在Fabric中,又是以怎樣的形式存在呢?接下來的這篇文章,將會做詳細介紹。全文按照如下結構展開:
全文結構
一、基本概念
MSP是Membership Service Provider的縮寫,直譯為成員關系服務提供者。為了更好的理解MSP,這里首先介紹MSP中的要用到的一些術語。
certificate 證書
證書(certificate)是Fabric中權限管理的基礎。目前采用了基於ECDSA算法的非對稱加密算法來生成公鑰和私鑰,證書格式則采用了X.509的標准規范。
Fabric中采用單獨的Fabric CA項目來管理證書的生成。每一個實體、組織都可以擁有自己的身份證書,並且證書也遵循了組織結構,方便基於組織實現靈活的權限管理。
Member 成員
擁有網絡唯一根證書的合法獨立實體。
在Fabric區塊鏈中,peer節點和app client這樣的網絡組件實際上就是一個Member。
在學習過程中,一度對成員與Peer之間的關系不太清楚,這里做一個總結。
成員 與 Peer的關系
Fabric網絡提供的是聯盟鏈服務,聯盟由多個組織構成,組織中的成員提供了節點服務來維護網絡,同時通過身份證書來進行權限管理。
通道概念就可以理解為一個通道(Fabric中的channel)對應一個聯盟.
一個通道上可以有多個組織。每個組織(Fabric中的org)有多個成員。
也就是說,成員提供節點服務。
一個組織中的成員可以根據網絡中流量的要求,提供不同數量的節點服務來滿足網絡中的訪問量。
Organization 組織
組織(organization)代表一組擁有共同信任的根證書(可以為根CA證書或中間CA證書)的成員。
這些成員由於共享同樣的信任根,彼此之間信任度很高,可以相互交換比較敏感的內容。同一個組織的成員節點在網絡中可以被認為是同一個身份,代表組織進行簽名。組織中成員可以為普通成員角色或者管理員角色,后者擁有更高的權限,可以對組織配置進行修改。
組織一般包括名稱、ID、MSP信息、管理策略、認證采用的密碼庫類型、一組錨點節點位置等信息。通常情況下,多個組織為了進行數據溝通,可以加入到同一個通道中。
組織示例
如上圖所示,三家銀行一共三個組織,兩兩加入到同一個通道中彼此進行相關數據交互,而無需擔心被其他人看到。
Consortium 聯盟
聯盟由若干組織構成的集合,是聯盟鏈場景所獨有的結構形式。聯盟一般用於多個組織相互合作的場景,例如某聯盟中指定需要所有參與方同時對交易背書,才允許在網絡中進行執行。
聯盟中的組織成員會使用同一個排序服務,並且遵循相同的通道創建策略(Channel-CreationPolicy)。通道創建策略可以為ALL、MAJORITY或者ANY(默認值)。通道在創建時也必須指定所綁定的聯盟信息。例如,某個聯盟內可能定義必須要所有成員都同意才能創建新的通道;或者任何成員都可以自行創建新的通道。通道創建策略會成為所新建通道Application組的修改策略(mod_policy)。
在設置聯盟時候,每個組織都需要指定自己的ID信息,該信息必須要跟該組織所關聯的MSP ID一致。
MSP 成員關系服務提供者
成員服務提供者(MSP)是一個提供抽象化成員操作框架的組件。
MSP將頒發與校驗證書,以及用戶認證背后的所有密碼學機制與協議都抽象了出來。
一個MSP可以自己定義身份,以及身份的管理(身份驗證)與認證(生成與驗證簽名)規則。也就是說,在一個運行的fabric系統網絡中有眾多的參與者,MSP就是為了管理這些參與者,可以辨識驗證哪些人有資格,哪些人沒資格,既維護某一個參與者的權限,也維護參與者之間的關系。
為了處理網絡成員身份和身份,成員服務提供者(MSP)管理用戶id,並對網絡中的所有參與者進行身份驗證。一個Fabric區塊鏈網絡可以由一個或多個MSPs控制。這提供了成員操作的模塊化,以及跨不同成員標准和體系結構的互操作性。
當MSP的成員管理規則表示一個團體,組織或組織分工時,該名稱會被引用。這又被成為MSP標識符或MSP ID。對於每個MSP實例,MSP標識符都必須獨一無二。關於這一點,會在后面MSP實踐中詳細說明。
MS(Member Service) 成員服務
成員服務在許可的區塊鏈網絡上認證、授權和管理身份。在peer和order中運行的成員服務的代碼都會認證和授權區塊鏈操作。它是基於PKI的MSP實現。
綜上所述,成員是最基本的元素,它對應的是我們Fabric網絡中的Peer節點或者Order節點或者Fabric-CA。MSP就是對這些成員進行身份的管理與驗證的實現。
總結為一句話,成員關系服務提供者,給成員提供成員服務。這種服務是基於PKI的MSP實現的。
二、MSP的作用
從上面的解釋中可知,MSP將頒發與校驗證書,以及用戶認證背后的所有密碼學機制與協議都抽象了出來。
成員服務提供者(MSP)管理用戶id,並對網絡中的所有參與者進行身份驗證。一個Fabric區塊鏈網絡可以由一個或多個MSPs控制。這提供了成員操作的模塊化,以及跨不同成員標准和體系結構的互操作性。
三、MSP結構
Fabric中提出了成員服務提供者(Membership Service Provider,MSP)的概念,抽象代表了一個身份驗證的實體。基於它可以實現對不同資源進行基於身份證書的權限驗證。
成員服務提供者代表了用於對某個資源(成員、節點、組織等)進行身份驗證的一組機制,是實現權限管理的基礎。
基於MSP,資源實體可以對數據簽名進行確認,網絡可以對簽名的身份進行驗證。
通常情況下,一個組織或聯盟可以對應到一個層級化的MSP。這里所謂的層級化的MSP,是指由根證書,生成中間件證書等組成的層級化的結構,從而實現不同管理員與普通成員之間的權限控制。
一個資源實體的MSP結構中往往包括簽名和驗證算法,以及一組符合X.509格式的證書,這些證書最后都需要追溯到同一個信任的根。
以下是一個MSP結構中常見的組成部分:
· 一組信任的根證書,是整個組織證書信任的基礎,根證書可以簽發中間層證書;
· MSP的管理員的身份證書,管理員可以對MSP中證書進行管理;
· 組織單元(Organizational Unit)列表(可選);
· 一組信任的中間證書,中間證書由根證書簽發(可選);
· 證書撤銷列表,代表被吊銷的證書名單(可選)。
如果更詳細一些,可以用下圖來表示:
MSP結構
Root CAs | 根證書列表
此文件夾包含,由此MSP代表的組織信任的Root CA,自簽名X.509證書列表。此MSP文件夾中必須至少有一個Root CA X.509證書。這是最重要的文件夾,因為它標識了所有其它證書。
Intermediate CAs | 中間證書列表
此文件夾包含此組織信任的Intermediate CA的X.509證書列表。每個證書都必須由MSP中的一個Root CA簽署,或者由 Intermediate CA 簽署。
Intermediate CA可以表示組織的不同細分或組織本身(例如,如果商業CA用於組織的身份管理)。在前一種情況下,可以使用CA層次結構中,較低的其他Intermediate CA來表示組織細分。請注意,可能有一個沒有任何中間CA的功能網絡,在這種情況下,此文件夾將為空。
與Root CA文件夾一樣,此文件夾定義了中間證書。只有擁有了這些證書,才能被系統視為組織成員的CA。
Organizational Units (OUs) | 組織單元列表
可選的
Administrators | 管理員身份證書
該文件夾包含一個身份列表,用於定義具有該組織管理員角色的參與者。對於標准MSP類型,此列表中應該有一個或多個X.509證書。
Revoked Certificates | 撤銷證書列表
可選的
KeyStore for Private Key | 私鑰庫
該文件夾為peer 或 orderer節點(或客戶端的local MSP)的local MSP定義,並包含節點的signing key(簽名密鑰)。 此密鑰用於簽署數據,作為認可階段的一部分。
該文件夾對Local MSP是必須的,並且必須包含一個私鑰。 很明顯,訪問這個文件夾,只能由,對此peer有管理權限的用戶。
Channel MSP的配置不包括此部分,因為Channel MSP旨在提供純粹的身份驗證功能,而不是簽署能力。
TLS Root CA | TLS根證書列表
此文件夾包含,此組織為TLS通信所信任的Root CA的自簽名X.509證書列表。 TLS通信的一個例子是,peer需要連接到orderer以便它可以接收ledger更新。
MSP TLS信息涉及網絡內的節點,即對peers 和 the orderers,此文件夾中必須至少有一個TLS Root CA X.509證書。
TLS Intermediate CA | TLS中間證書
此文件夾包含由此MSP代表的,組織信任的用於TLS通信的Intermediate CA證書列表。當商業CA用於組織的TLS證書時,此文件夾特別有用。 它是可選的。
Fabric中MSP相關實現代碼都在msp目錄下,目前采用了bccspmsp結構來代表一個成員身份結構,並且采用了MSPConfig(主要是其成員FabricMSPConfig)結構來代表跟該實體相關的證書信息。
MSP中各實體資源的證書必須被證書信任樹上的葉子節點簽名。中間層簽名的證書會被認為是非法實體證書。
四、MSP實踐
我們講,MSP在Fabric中的作用是對用戶進行管理。那么,它是怎么實現用戶管理與權限認證的呢?
第一,生成相關的證書和簽名。
第二,在Peer,Orderer,Channel等組件的配置文件設置關於msp的相關信心。
也就是說,要想初始化一個MSP實例:首先,要生成用戶權限管理和簽名認證的證書。然后,每一個peer節點和orderer節點,Channel等都需要在本地指定其配置。
注意channel上的全體成員均參與此過程。
在一個channel中,當MSP的成員管理規則表示一個團體,組織或組織分工時,該名稱會被引用。這又被成為MSP標識符或MSP ID。對於每個MSP實例,MSP標識符都必須獨一無二。舉個例子:系統channel創建時如果檢測到兩個MSP有相同的標識符,那么orderer節點的啟動將以失敗告終。
在實際的操作中如下:
1. 編寫crypto-config.yaml配置文件指定網絡的拓撲結構和組織結構。
2. cryptogen-生成秘鑰和證書文件。
快速地根據配置自動批量生成所需要的密鑰和證書文件。
3. 編寫依賴配置文件 configtx.yaml。
該文件包含網絡的定義,並給出了網絡組件的每個網絡實體的加密材料的存儲位置。
4. configtxgen-生成通道配置。
在這個過程中,會生成系統channel的創世紀塊。該創世紀塊(genesis block)中包含所有MSP的驗證元素。回憶一下,MSP驗證元素有MSP身份標識(MSP identifier),root CAs,intermediate CAs,admin CAs,OU List,CRLs。
5. 在Peer節點和Order節點配置MSP相關的信息。
具體步驟會在后面“Fabric配置管理”中仔細講解。
下面,對步驟1進行簡單的說明:
使用cryptogen生成所需文件的命令:
$ cryptogen generate \
--config $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-
config.yaml \
--output crypto-config
上述命令解釋如下:
·generate[flags]:生成密鑰和證書文件;
其中,generate子命令支持如下參數:
·--output:指定存放生成密鑰和證書文件的路徑,默認為當前目錄下的crypto-config目錄;
·--config:指定所采用的配置模板文件的路徑。
為了實現對Peer,Orderer以及Channel的管理,在搭建網絡的過程中,我們只需要在它們的配置文件中,配置好相關的證書即可。
拿Peer配置為例:
peer配置示例
mspConfigPath:MSP目錄所在的路徑,可以為絕對路徑,或相對配置目錄的路徑,一般建議為/etc/hyperledger/fabric/msp;
localMspId關聯Peer所關聯的MSP的ID,一般為組織單位名稱,需要與聯盟配置中的名稱一致。
五、總結
本文
介紹了MSP的基本概念:
- 它是Fabric網絡中的一個邏輯組件。它是在證書,成員,聯盟,簽名等基礎概念之上,抽象出來的。
介紹了MSP的作用:
- 在Fabric網絡中,提供用戶管理與權限驗證的功能。
介紹了MSP的基本結構,也就是實現用戶管理與權限驗證,需要哪些信息才能提供保障。
包括:
- 根證書列表、組織單元列表、管理員身份證書、撤銷證書列表、私鑰庫、TLS根證書列表、TLS中間證書等等。
介紹了實現MSP的基本步驟
- 生成MSP證書和它們的簽名匙
- 配置PEER和Orderer
- 配置Channel
由此,關於MSP,我們也有了一個較為宏觀的認識。
參考資料:
Hyperledger系列(十) Fabric MSP和Fabric CA的區別
《區塊鏈原理、設計與應用》-楊保華-陳昌-12.4節-權限管理與策略