HyperLedger-Fabric原理-MSP詳解-MSP基礎
把Fabric系統看成由不同的邏輯結構組成。其中MSP是一個邏輯結構,主要的功能是承擔許可權管理。
那麼,MSP是什麼?它在Fabric中,又是以怎樣的形式存在呢?接下來的這篇文章,將會做詳細介紹。全文按照如下結構展開:
一,基本概念
MSP是Membership Service Provider的縮寫,直譯為成員關係服務提供者。為了更好的理解MSP,這裡首先介紹MSP中的要用到的一些術語。
1>certificate 證書
證書(certificate)是Fabric中許可權管理的基礎。目前採用了基於ECDSA演算法的非對稱加密演算法來生成公鑰和私鑰,證書格式則採用了X.509的標準規範。
Fabric中採用單獨的Fabric CA專案來管理證書的生成。每一個實體、組織都可以擁有自己的身份證書,並且證書也遵循了組織結構,方便基於組織實現靈活的許可權管理。
2>Member 成員
擁有網路唯一根證書的合法獨立實體。
在Fabric區塊鏈中,peer節點和app client這樣的網路元件實際上就是一個Member。
在學習過程中,一度對成員與Peer之間的關係不太清楚,這裡做一個總結如下:
成員 與 Peer的關係
Fabric網路提供的是聯盟鏈服務,聯盟由多個組織構成,組織中的成員提供了節點服務來維護網路,同時通過身份證書來進行許可權管理。
通道概念就可以理解為一個通道(Fabric中的channel)對應一個聯盟.
一個通道上可以有多個組織。每個組織(Fabric中的org)有多個成員。
也就是說,成員提供節點服務
一個組織中的成員可以根據網路中流量的要求,提供不同數量的節點服務來滿足網路中的訪問量。
3>Organization 組織
組織(organization)代表一組擁有共同信任的根證書(可以為根CA證書或中間CA證書)的成員。
這些成員由於共享同樣的信任根,彼此之間信任度很高,可以相互交換比較敏感的內容。同一個組織的成員節點在網路中可以被認為是同一個身份,代表組織進行簽名。組織中成員可以為普通成員角色或者管理員角色,後者擁有更高的許可權,可以對組織配置進行修改。
組織一般包括名稱、ID、MSP資訊、管理策略、認證採用的密碼庫型別、一組錨點節點位置等資訊。通常情況下,多個組織為了進行資料溝通,可以加入到同一個通道中。
如上圖所示,三家銀行一共三個組織,兩兩加入到同一個通道中彼此進行相關資料互動,而無需擔心被其他人看到。
4>Consortium 聯盟
聯盟由若干組織構成的集合,是聯盟鏈場景所獨有的結構形式。聯盟一般用於多個組織相互合作的場景,例如某聯盟中指定需要所有參與方同時對交易背書,才允許在網路中進行執行。
聯盟中的組織成員會使用同一個排序服務,並且遵循相同的通道建立策略(Channel-CreationPolicy)。通道建立策略可以為ALL、MAJORITY或者ANY(預設值)。通道在建立時也必須指定所繫結的聯盟資訊。例如,某個聯盟內可能定義必須要所有成員都同意才能建立新的通道;或者任何成員都可以自行建立新的通道。通道建立策略會成為所新建通道Application組的修改策略(mod_policy)。
在設定聯盟時候,每個組織都需要指定自己的ID資訊,該資訊必須要跟該組織所關聯的MSP ID一致。
5>MSP 成員關係服務提供者
成員服務提供者(MSP)是一個提供抽象化成員操作框架的元件。
MSP將頒發與校驗證書,以及使用者認證背後的所有密碼學機制與協議都抽象了出來。
一個MSP可以自己定義身份,以及身份的管理(身份驗證)與認證(生成與驗證簽名)規則。也就是說,在一個執行的fabric系統網路中有眾多的參與者,MSP就是為了管理這些參與者,可以辨識驗證哪些人有資格,哪些人沒資格,既維護某一個參與者的許可權,也維護參與者之間的關係。
為了處理網路成員身份和身份,成員服務提供者(MSP)管理使用者id,並對網路中的所有參與者進行身份驗證。一個Fabric區塊鏈網路可以由一個或多個MSPs控制。這提供了成員操作的模組化,以及跨不同成員標準和體系結構的互操作性。
當MSP的成員管理規則表示一個團體,組織或組織分工時,該名稱會被引用。這又被成為MSP識別符號或MSP ID。對於每個MSP例項,MSP識別符號都必須獨一無二。關於這一點,會在後面MSP實踐中詳細說明。
6>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)列表(可選);
· 一組信任的中間證書,中間證書由根證書籤發(可選);
· 證書撤銷列表,代表被吊銷的證書名單(可選)。
如果更詳細一些,可以用下圖來表示:
1>Root CAs | 根證書列表
此資料夾包含,由此MSP代表的組織信任的Root CA,自簽名X.509證書列表。此MSP資料夾中必須至少有一個Root CA X.509證書。這是最重要的資料夾,因為它標識了所有其它證書。
2>Intermediate CAs | 中間證書列表
此資料夾包含此組織信任的Intermediate CA的X.509證書列表。每個證書都必須由MSP中的一個Root CA簽署,或者由 Intermediate CA 簽署。
Intermediate CA可以表示組織的不同細分或組織本身(例如,如果商業CA用於組織的身份管理)。在前一種情況下,可以使用CA層次結構中,較低的其他Intermediate CA來表示組織細分。請注意,可能有一個沒有任何中間CA的功能網路,在這種情況下,此資料夾將為空。
與Root CA資料夾一樣,此資料夾定義了中間證書。只有擁有了這些證書,才能被系統視為組織成員的CA。
3>Organizational Units (OUs) | 組織單元列表
可選的
4>Administrators | 管理員身份證書
該資料夾包含一個身份列表,用於定義具有該組織管理員角色的參與者。對於標準MSP型別,此列表中應該有一個或多個X.509證書。
5>Revoked Certificates | 撤銷證書列表
可選的
6>KeyStore for Private Key | 私鑰庫
該資料夾為peer 或 orderer節點(或客戶端的local MSP)的local MSP定義,幷包含節點的signing key(簽名金鑰)。 此金鑰用於簽署資料,作為認可階段的一部分。
該資料夾對Local MSP是必須的,並且必須包含一個私鑰。 很明顯,訪問這個資料夾,只能由,對此peer有管理許可權的使用者。
Channel MSP的配置不包括此部分,因為Channel MSP旨在提供純粹的身份驗證功能,而不是簽署能力。
7>TLS Root CA | TLS根證書列表
此資料夾包含,此組織為TLS通訊所信任的Root CA的自簽名X.509證書列表。 TLS通訊的一個例子是,peer需要連線到orderer以便它可以接收ledger更新。
MSP TLS資訊涉及網路內的節點,即對peers 和 the orderers,此資料夾中必須至少有一個TLS Root CA X.509證書。
8>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配置為例:
mspConfigPath:MSP目錄所在的路徑,可以為絕對路徑,或相對配置目錄的路徑,一般建議為/etc/hyperledger/fabric/msp;
localMspId關聯Peer所關聯的MSP的ID,一般為組織單位名稱,需要與聯盟配置中的名稱一致。