fabric中的一些概念

 

成員

如果你已經閱讀了身份文檔,那麼你應該已經知道了 PKI 是如何能夠通過信任鏈條來提供可驗證身份的。現在我麼來看一下如何用這些身份代表區塊鏈網絡中的受信任成員。

這就需要成員服務提供者(MSP)來發揮作用了,它能識別出哪些根 CA 和中間 CA 是受到信任來定義某個信任領域的成員的,例如,一個組織。MSP發揮作用的方式要麼是將成員的身份進行列表,要麼是識別出哪些CA獲權爲其成員頒發有效證書,要麼(最常見的方式)將二者結合使用。

MSP 的能力絕非僅僅羅列誰是網絡參與者或通道成員那麼簡單。MSP 可以識別參與者在 該MSP 代表的組織範圍內可能扮演的特定角色(例如,管理員或作爲子組織小組的成員),同時MSP還爲網絡或通道環境內訪問權限的定義奠定了基礎(例如,通道管理員、讀取者、寫入者)。

MSP 的配置會(以通道 MSP 的形式)被廣播到相應組織成員所參與的全部通道中。除了通道 MSP之外,Peer 節點、排序節點以及客戶端也都維護着一個本地 MSP,用來驗證通道環境外的成員信息,並定義對某特定組件的權限(比如,誰能夠在節點上安裝鏈碼)。

此外,MSP 還支持將已撤銷的一組身份識別出來(如身份文檔中所討論的),但我們馬上要討論該過程是如何擴展到 MSP的。

稍後我們將繼續討論本地和通道 MSP。現在,讓我們看看 MSP 通常做些什麼。

將 MSP 映射到組織

組織是被管理的成員小組。組織可大可小,可以像一家跨國公司那麼大,也可以像一個花店那麼小。通常,組織由一個單個MSP來代表。注意,這與我們稍後將討論的 X.509 證書中定義的組織概念不同。

由於組織和其MSP之間存在排他關係,因此以組織名稱來命名MSP是很明智的,這是大多數策略配置中都會採用的約定。例如,組織ORG1可能想將某個MSP命名爲ORG1-MSP。在有些情況中,一個組織可能需要多個成員小組,比如,需要用通道來在組織間執行完全不同的業務功能時。在這些情況中,擁有多個MSP並且相應地對這些MSP命名是很有道理的,例如,ORG2-MSP-NATIONAL 和ORG2-MSP-GOVERNMENT反映了NATIONAL銷售通道上ORG2內與GOVERNMENT管理通道不同的成員信任根源。

由於組織及其 MSP 之間的排他性關係,所以最好使用組織的名稱命名 MSP,您會發現在大多數策略配置中都採用了這種約定。例如,組織 ORG1 可能有一個名爲 ORG1-MSP 之類的 MSP。在某些情況下,組織可能需要多個成員組,例如,通道用於在組織之間執行完全不同的業務功能。在這些情況下,有多個 MSP 並相應地命名是有意義的,例如,ORG2-MSP-NATIONAL 和 ORG2-MSP-GOVERNMENT ,這反映了 ORG2 在全國銷售通道中與政府監管通道中成員的信任根是不同的。

 

一個組織有兩種不同的 MSP 配置。第一個配置顯示了 MSP 和組織之間的典型關係——單個 MSP 定義了組織的一組成員。在第二種配置中,用不同的 MSP 來表示具有國家、國際和政府關聯的不同組織小組。

組織的單位以及 MSP

一個組織通常被劃分爲多個組織單元(OU),每個單元都有一組特定的職責。例如,ORG1 組織可能同時具有 ORG1-MANUFACTURING 和 ORG1-DISTRIBUTION OU 來反映這些獨立的業務線。當 CA 發出 X.509 證書時,證書中的 OU 字段會指明身份所屬的業務線。

稍後我們將看到,OU 怎樣幫忙控制組織中被認爲是區塊鏈網絡成員的部分。例如,只有來自 ORG1-MANUFACTURING OU 的身份才能訪問通道,而來自 ORG1-DISTRIBUTION 的不能。

最後,儘管這是對 OU 的輕微誤用,但有時它們可以被聯盟中的不同組織用來區分彼此。在這種情況下,不同的組織使用相同的根 CA 和中間 CA 作爲它們的信任鏈,但是分配 OU 字段來識別各組織的成員。稍後我們還將看到如何配置 MSP 來實現這一點。

本地和通道 MSP

在區塊鏈網絡中,MSP 出現在兩個位置:

  • 在通道配置中(通道 MSP
  • 在參與者節點本地(本地 MSP

本地 MSP 是爲客戶端(用戶)和節點(Peer 節點和排序節點)定義的。節點本地 MSP 爲該節點定義權限(例如,節點管理員是誰)。用戶的本地 MSP 允許用戶端在其交易中作爲通道的成員(例如在鏈碼交易中)或作爲系統中特定角色的所有者(例如在配置交易中的某組織管理員)對自己進行身份驗證。

每個節點和用戶都必須定義一個本地 MSP,因爲它定義了誰擁有該級別的管理或參與權(節點管理員不一定是通道管理員,反之亦然)。

相反,通道 MSP 在通道級別定義管理和參與權。每個參與通道的組織都必須爲其定義一個 MSP。通道上的 Peer 節點和排序節點將共享通道 MSP,因此能夠正確地對通道參與者進行身份驗證。這意味着,如果某個組織希望加入通道,則需要在通道配置中加入一個包含該組織成員信任鏈的 MSP。否則,由該組織身份發起的交易將被拒絕。

本地和通道 MSP 之間的關鍵區別不在於它們如何工作(它們都將身份轉換爲角色)而在於它們的作用域

 

本地和通道 MSP。每個節點的信任域(例如組織)由節點的本地 MSP(例如 ORG1 或 ORG2)定義。通過將組織的 MSP 添加到通道配置中,可以表示該組織加入了通道。例如,此圖中的通道由 ORG1 和 ORG2 管理。類似的原則也適用於網絡、排序節點和用戶,但是爲了簡單起見,這裏沒有顯示這些原則。

你可能會發現通過查看區塊鏈管理員安裝和實例化智能合約時所發生的情況,能幫助你理解如何使用本地和通道 MSP ,如上圖所示。

管理員 B 使用身份連接到節點上,該身份是由RCA1頒發的,存儲在本地 MSP中。當 B 試圖在節點上安裝智能合約時,該節點檢查其本地 MSP ORG1-MSP,以驗證 B 的身份確實是 ORG1 的成員。驗證成功後纔會允許安裝。隨後,B 希望在通道上實例化智能合約。因爲這是一個通道操作,所以通道上的所有組織都必須同意該操作。因此,節點在成功提交此命令之前必須檢查該通道的 MSP。(其他事情也必須發生,但現在先專注於上面的事情。)

本地 MSP 只被定義在它們應用到的節點或用戶的文件系統上。因此,從物理和邏輯上來說,每個節點或用戶只有一個本地 MSP。但是,由於通道 MSP 對通道中的所有節點都可用,因此在邏輯上他們只在通道配置中定義一次。然而,通道 MSP 也在通道中每個節點的文件系統上實例化,並通過共識來保持同步。因此,雖然每個節點的本地文件系統上都有各通道 MSP 的副本,但從邏輯上講,通道 MSP 駐留在通道或網絡上並由通道或網絡進行維護。

MSP 層級

通道MSP和本地 MSP 之間的區別反映了組織管理其本地資源(如 Peer 節點或排序節點)和通道資源(如賬本、智能合約和聯盟)的需求,這些資源在通道或網絡級別運行。將這些 MSP 看作是不同級別的是有幫助的,其中處於較高級別的 MSP 與網絡管理相關,而處於較低級別的 MSP 處理私有資源管理的身份。MSP 在每個管理級別都是強制性的——必須爲網絡、通道、Peer 節點、排序節點和用戶定義它們。

 

MSP 的級別。Peer 節點和排序節點的 MSP 是本地的,而通道(包括網絡配置通道)的 MSP 是對該通道的所有參與者共享的。在這個圖中,網絡配置通道由 ORG1 管理,但是另一個應用程序通道可以由 ORG1 和 ORG2 管理。Peer 節點是 ORG2 的成員,由 ORG2 管理,而 ORG1 管理圖中的排序節點。ORG1 信任來自 RCA1 的身份,而 ORG2 信任來自RCA2 的身份。注意,這些是管理員身份,反映了誰可以管理這些組件。所以當 ORG1 管理網絡時,ORG2.MSP 也要在網絡定義中。

  • 網絡 MSP :一個網絡的配置文件,通過定義參與組織的 MSP 定義了誰是這個網絡中的成員,並且定義了這些成員中的哪些被授權來執行相關管理任務 (比如,創建一個通道)。
  • 通道 MSP:對於一個通道來說,保持其成員MSP的不同至關重要。通道爲一羣特定組織提供了一個彼此間私有的通信方式,這些組織又對這個通道進行管理。該通道 MSP 中所解釋的通道策略定義了誰有能力參與該通道上的某些操作,比如,添加組織或者實例化鏈碼。注意,管理通道的權限和管理網絡配置通道(或任何其他通道)的能力之間沒有必然聯繫。管理權僅存在於被管理的範圍內(除非已在規則中明確——查看下邊對於 ROLE 屬性的討論)。
  • Peer 節點 MSP:這個本地 MSP 是在每個節點的文件系統上定義的,並且每個節點都有一個單獨的 MSP 實例。從概念上講,該MSP和通道 MSP 執行着完全一樣的操作,但僅適用於其被定義的節點。在節點上安裝一個鏈碼,這個就是使用節點的本地 MSP 來判定誰被授權進行某個操作的例子。
  • 排序節點 MSP: 就和Peer 節點 MSP 一樣,排序節點的本地 MSP 也是在節點的文件系統上定義的,並且只會應用於這個節點。同時,排序節點也是由某個單獨的組織所有,因此具有一個單獨的 MSP 用於羅列它所信任的操作者或者節點。

MSP 結構

目前爲止,你所看到的 MSP 最爲重要的元素就是對於根或者中間 CA 的聲明,這些 CA 被用來在對應的組織中建立一個參與者或者節點的成員身份。然而這裏還有更多的元素同這兩個元素一起來輔助成員相關的功能。

 

上面的圖顯示了本地 MSP 在本地文件系統中的儲存方式。儘管通道 MSP 的物理結構不是完全按照這種方式構建的,但是這樣考慮它們仍然是一種有用的方式。

正如您所看到的,MSP 有九個元素。在目錄結構中考慮這些元素最簡單,其中 MSP 名稱就是根文件夾名稱,而每個子文件夾代表 MSP 配置的不同元素。

讓我們深入探討一下這些文件夾,看看它們爲什麼重要。

  • 根 CA:該文件夾包含了根CA自主簽名的X.509證書的列表,其中的根CA是受MSP代表的組織所信任的。在這個 MSP 文件夾中至少要有一個根 CA X.509 證書。

    這是最重要的一個文件夾,因爲它指出了所有可用於證明成員屬於對應組織的其他證書的來源 CA。

  • 中間 CA:該文件夾包含了受這個組織信任的中間 CA 對應的 X.509 證書列表。其中每個證書的簽發方必須是MSP中的某個根CA或中間CA,若是中間CA,則該中間 CA 的證書籤發 CA 信任鏈必須最終能夠連上一個受信任的根 CA。

    中間 CA 可能代表了組織中不同的一個分支(就像 ORG1 有 ORG1-MANUFACTURING 和 ORG1-DISTRIBUTION一樣), 也可能代表了這個組織自身(比如當一個商業 CA 被用來管理組織的身份時)。在後邊這個情況中,中間 CA 可以被用來代表組織的分支。從這裏你或許能看到更多關於 MSP 配置最佳實踐的信息。注意,對於一個工作網絡來說,也有可能沒有任何的中間 CA,這種情況下,這個文件夾就是空的。

    就像根 CA 文件夾一樣,中間CA文件夾定義了可用於證明組織成員身份的證書的簽發CA。

  • 組織單元 (OU):組織單元被列在 $FABRIC_CFG_PATH/msp/config.yaml 文件中,包含了組織單元的一個列表,其中的成員被認爲是由這個 MSP 所代表的組織的一部分。當你想要把一個組織的成員限定爲持有一個其中包含某特定組織單元的身份(由MSP指定的某個CA簽發)的成員時,它是很有用的。

    指定 OU 不是必須的。如果沒有列出任何 OU,MSP中的所有身份(由根 CA 和中間 CA 文件夾指出)都會被認爲是組織的成員。

  • 管理員:該文件夾包含了一個身份列表,其中的身份爲該組織定義了哪些操作者擔任管理員。對於標準的 MSP 類型來說,在這個列表中應該有一個或者多個 X509 證書。

    值得注意的是,僅憑藉某操作者擔任管理員這一點並不能說明它可以管理某些特定的資源。對於一個給定身份來說,它在管理系統方面的實際能力是由管理系統資源的相關策略決定的。比如,一個通道策略可能會指明 ORG1-MANUFACTURING 管理員有權利來向通道中添加新的組織,然而 ORG1-DISTRIBUTION 管理員卻沒有這個權利。

    雖然 X.509 證書具有 ROLE 屬性(比如,明確規定一個操作者是一個 admin),但是該屬性指的是操作者在其組織內所扮演的角色,而不是在區塊鏈網絡上。這一點與OU 屬性的目的類似,若已經定義OU 屬性,則其指的是操作者在組織中的位置。

    如果某個通道策略允許來自一個(或某些)組織的任何管理員執行某些通道功能的話,那麼ROLE 屬性就能夠用來授予該通道級別上的管理權力。這樣的話,一個組織層面的角色可以授予一個網絡級別的角色。

  • 撤銷證書:如果一個參與者的身份被撤銷,那麼該身份的識別信息(不是指身份本身)就會被儲存在這個文件夾中。對基於 X.509 的身份來說,這些標識符就是主體密鑰標識符 (Subject Key Identifier,SKI) 和權限訪問標識符(Authority Access Identifier,AKI)的字符串對,並且無論何時使用 X.509 證書,都會檢查這些標識符,以確保證書未被撤銷。

    雖然這個列表在概念上跟 CA 的證書撤銷列表 (CRL) 是一樣的,但是它還和從組織中撤銷成員有關。這樣一來,本地或通道 MSP 的管理員通過廣播被撤銷證書的發行CA的最新CRL,就可以迅速將這個參與者或者節點從組織中撤銷。羅列這一列表並不是必須的,只有在證書要撤銷的時候纔會用到。

  • 節點身份:這個文件夾包含了節點的身份,比如,與KeyStore內容結合使用的加密材料將允許節點在向同通道或同網絡上其他參與者發送的信息中驗證自己的身份。對基於 X.509 的身份來說, 該文件夾包含了一個 X.509 證書。Peer節點會把這一證書放置到交易提案的響應中,比如,來表明該節點已經爲此交易背書,在接下來的驗證階段會根據交易的背書策略來驗證這一背書。

    本地 MSP 中必須擁有”節點身份“文件夾,節點中有且僅有一個X.509 證書。而通道 MSP中不使用該文件夾 。

  • 私鑰的 KeyStore:這個文件夾是爲 Peer 節點或者排序節點(或者在客戶端的本地 MSP 中) 的本地 MSP 定義的,其中包含了節點的簽名祕鑰。這個祕鑰與節點身份文件夾裏的節點身份能以密碼方式匹配,可用來對數據進行簽名,比如在背書階段對一個交易提案的響應進行簽名。

    本地 MSP 必須有這個文件夾,而且該文件夾必須包含且僅包含一個私鑰。很顯然,這個文件夾的訪問權限必須限定在對這個節點有管理權限的用戶的身份。

    因爲通道 MSP 的目標只是提供身份驗證功能,而不是簽名的能力,所以通道 MSP 的配置中不包含這個文件夾。

  • TLS 根 CA:該文件夾包含了根CA的自主簽名X.509證書的列表,其中的根CA是受該組織信任來進行TLS通信的。一個 TLS 通信的例子就是,Peer 節點爲接受到更新過的賬本, 需要連接到一個排序節點,這時就會發生TLS通信。

    MSP TLS 信息和網絡內部的節點(Peer 節點和排序節點)有關聯,換句話說,它與使用該網絡的應用程序和管理員無關。

    這個文件夾中必須有至少一個 TLS 根 CA X.509 證書。

  • TLS 中間 CA:這個文件夾包含了在通信時這個 MSP 所代表的的組織所信任的中間 CA 證書列表。當商業 CA 被用於一個組織的 TLS 證書時,該文件夾特別有用。跟成員的中間 CA 類似,指定中間 TLS CA 是可選項。

    關於 TLS 的更多信息,點擊這裏

如果你讀過這個文檔以及我們關於身份的文檔,你應該對身份和成員在 Hyperledger Fabric 中的作用有了很好的理解。您瞭解瞭如何使用 PKI 和 MSP 來識別在區塊鏈網絡中協作的參與者。您學習了證書、公鑰、私鑰和信任根的工作原理,以及 MSP 的物理和邏輯結構。

Next  Previous

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章