HyperLedger-Fabric原理-MSP詳解-Peer&Orderer配置MSP
本文是MSP詳解的第二部分,我們通過第一部分對MSP有了初步的認識,下面我們來通過peer和order節點來對MSP做一個詳細的講解
本文會以下面的結構展開:
一,生成公私鑰和證書資訊
生成證書和公私鑰的過程
Fabric中有兩種型別的公私鑰和證書,一種是給節點之間,為了通訊安全而準備的TLS證書,另一種是使用者登入和許可權控制的使用者證書。這些證書本來應該是由CA來頒發,但是我們這裡是測試環境,並沒有啟用CA節點,這裡我們使用:cryptogen來生成這兩種證書。我們生成的公私鑰和證書是依據配置檔案crypto-config.yaml檔案來生成的。關於該檔案的詳細介紹,參見《HyperLedger-Fabric1.0原理-Fabric網路搭建過程之配置檔案》一文,這裡不再贅述。
1 cryptogen generate --config=./crypto-config.yaml
e2e_cli例子中,生成的的網路拓撲結構如下圖所示。
該命令會生成一個名為crypto-config的資料夾,該資料夾是基於Fabric網路的拓撲結構而來的:
二,目錄解析
生成的檔案都儲存到crypto-config資料夾,我們可以進入該資料夾檢視生成了哪些檔案:
檢視當前目錄下的crypto-config目錄,生成ordererOrganizations和peerOrganizations兩棵組織樹。
以peerOrganizations為例,該目錄下有兩個目錄org1.example.com和org2.example.com。分別對應通道中Org1和Org2的相關證書和簽名。
每個組織樹下都包括ca、msp、orderers(或peers)、tlsca、users五個子目錄。
org1.example.com表示Org1組織。
在peers目錄下,有兩個子目錄peer0.org1.example.com和peer1.org1.example.com包含了這兩個節點的msp配置資訊。
接下來以org1.example.com組織樹為例,每個目錄和檔案對應的功能講解。
org1.example.com/ ├── ca # 存放組織Org1的根證書和對應的私鑰檔案,預設採用EC演算法,證書為自簽名。組織內的實體將基於該根證書作為證書根。 │ ├── ca.org1.example.com-cert.pem │ └── dfb841b77804d726eea25231ae5e89a31901ca0538688a6d764731148f0bdc5b_sk ├── msp # 存放代表該組織的身份資訊。 │ ├── admincerts # 組織管理員的身份驗證證書,被根證書籤名。 │ │ └── [email protected]-cert.pem │ ├── cacerts # 組織的根證書,同ca目錄下檔案。 │ │ └── ca.org1.example.com-cert.pem │ └── tlscacerts # 用於TLS的CA證書,自簽名。 │ └── tlsca.org1.example.com-cert.pem ├── peers # 存放屬於該組織的所有Peer節點 │ ├── peer0.org1.example.com # 第一個peer的資訊,包括其msp證書和tls證書兩類。 │ │ ├── msp # msp相關證書 │ │ │ ├── admincerts # 組織管理員的身份驗證證書。Peer將基於這些證書來認證交易簽署者是否為管理員身份。 │ │ │ │ └── [email protected]-cert.pem │ │ │ ├── cacerts # 存放組織的根證書 │ │ │ │ └── ca.org1.example.com-cert.pem │ │ │ ├── keystore # 本節點的身份私鑰,用來簽名 │ │ │ │ └── 59be216646c0fb18c015c58d27bf40c3845907849b1f0671562041b8fd6e0da2_sk │ │ │ ├── signcerts # 驗證本節點簽名的證書,被組織根證書籤名 │ │ │ │ └── peer0.org1.example.com-cert.pem │ │ │ └── tlscacerts # TLS連線用到身份證書,即組織TLS證書 │ │ │ └── tlsca.org1.example.com-cert.pem │ │ └── tls # tls相關證書 │ │ ├── ca.crt # 組織的根證書 │ │ ├── server.crt # 驗證本節點簽名的證書,被組織根證書籤名 │ │ └── server.key # 本節點的身份私鑰,用來簽名 │ └── peer1.org1.example.com # 第二個peer的資訊,結構類似。(此處省略。) │ ├── msp │ │ ├── admincerts │ │ │ └── [email protected]-cert.pem │ │ ├── cacerts │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── keystore │ │ │ └── 82aa3f8f9178b0a83a14fdb1a4e1f944e63b72de8df1baeea36dddf1fe110800_sk │ │ ├── signcerts │ │ │ └── peer1.org1.example.com-cert.pem │ │ └── tlscacerts │ │ └── tlsca.org1.example.com-cert.pem │ └── tls │ ├── ca.crt │ ├── server.crt │ └── server.key ├── tlsca # 存放tls相關的證書和私鑰。 │ ├── 00e4666e5f56804274aadb07e2192db2f005a05f2f8fcfd8a1433bdb8ee6e3cf_sk │ └── tlsca.org1.example.com-cert.pem └── users # 存放屬於該組織的使用者的實體 ├── [email protected] # 管理員使用者的資訊,其中包括msp證書和tls證書兩類。 │ ├── msp # msp相關證書 │ │ ├── admincerts # 組織根證書作為管理員身份驗證證書 │ │ │ └── [email protected]-cert.pem │ │ ├── cacerts # 存放組織的根證書 │ │ │ └── ca.org1.example.com-cert.pem │ │ ├── keystore # 本使用者的身份私鑰,用來簽名 │ │ │ └── fa719a7d19e7b04baebbe4fa3c659a91961a084f5e7b1020670be6adc6713aa7_sk │ │ ├── signcerts # 管理員使用者的身份驗證證書,被組織根證書籤名。要被某個Peer認可,則必須放到該Peer的msp/admincerts目錄下 │ │ │ └── [email protected]-cert.pem │ │ └── tlscacerts # TLS連線用的身份證書,即組織TLS證書 │ │ └── tlsca.org1.example.com-cert.pem │ └── tls # 存放tls相關的證書和私鑰。 │ ├── ca.crt # 組織的根證書 │ ├── server.crt # 管理員的使用者身份驗證證書,被組織根證書籤名 │ └── server.key # 管理員使用者的身份私鑰,被組織根證書籤名。 └── [email protected] # 第一個使用者的資訊,包括msp證書和tls證書兩類 ├── msp # msp證書相關資訊 │ ├── admincerts # 組織根證書作為管理者身份驗證證書。 │ │ └── [email protected]-cert.pem │ ├── cacerts # 存放組織的根證書 │ │ └── ca.org1.example.com-cert.pem │ ├── keystore # 本使用者的身份私鑰,用來簽名 │ │ └── 97f2b74ee080b9bf417a4060bfb737ce08bf33d0287cb3eef9b5be9707e3c3ed_sk │ ├── signcerts # 驗證本使用者簽名的身份證書,被組織根證書籤名 │ │ └── [email protected]-cert.pem │ └── tlscacerts # TLS連線用的身份證書,被組織根證書籤名。 │ └── tlsca.org1.example.com-cert.pem └── tls # 組織的根證書 ├── ca.crt # 組織的根證書 ├── server.crt # 驗證使用者簽名的身份證書,被根組織證書籤名 └── server.key # 使用者的身份私鑰用來簽名。
上面目錄結構中的所有檔案,就是我們用cryptogen工具來生成的MSP需要用到的證書和相關檔案。主要包括各種證書和相關的簽名。
三,Peer&Orderer配置MSP
在上面,使用工具已經為我們生成了相關的目錄和對應的檔案。如果沒有工具,需要我們手動建立目錄,以及手動配置MSP,該怎麼做呢?
主要分成兩步:
第一步:
在peer / orderer 對應的目錄下,建立幾個子資料夾,放入對應的證書,簽名等相關資訊。
第二步:
在Peer/orderer的配置檔案中,設定證書和簽名的路徑。
節點的配置檔案如下:(peer對應的是core.yaml檔案 , orderer對應的是orderer.yaml)。
配置過程介紹
第一步詳細過程
要想(為peer節點或orderer節點)建立本地MSP,管理員應建立一個資料夾(如$MY_PATH/mspconfig)並在其下包含6個子資料夾與一個檔案:
- 資料夾admincerts包含PEM檔案:每個PEM檔案對應於一個管理員證書。
- 資料夾cacerts包含PEM檔案:每個PEM檔案對應於一個根CA的證書。
- 一個資料夾signcerts包含節點的X.509證書的PEM檔案。
- (可選)資料夾intermediatecerts包含一些PEM檔案:每個PEM檔案對應於一箇中間CA的證書。
- (可選)一個資料夾,tlscacerts以包含每個對應於TLS根CA證書的PEM檔案
- (可選)資料夾crls包含相關CRL。
- 資料夾keystore包含一個PEM檔案及節點的簽名金鑰;我們必須強調:現階段還不支援RSA金鑰。
- (可選)資料夾tlscacerts包含如下PEM檔案:每個PEM檔案對應於一個根TLS根CA的證書
- (可選)資料夾tlsintermediatecerts包含如下PEM檔案:每個PEM檔案對應於一箇中間TLS CA的證書
在e2e_cli中,該Org1組織中的有兩個節點,一個是管理員peer0,另一個是使用者peer1。
這兩個節點的檔案路徑如下:
peers資料夾下有兩個檔案,分別他們是peer0和peer1的本地MSP配置檔案所在:
進入peer0.org1.example.com資料夾下,可以看到如下兩個資料夾
此時,檔案的當前目錄為:
該目錄即為peer0.org1節點進行msp配置的檔案目錄。
一般情況,存放msp配置的相關資訊的資料夾可以命名為mspconfig 或者 msp。
其中,msp的檔案目錄結構如下所示:
這五個資料夾下分別放了Peer0節點完成證書與簽名認證所需要的相關檔案。
至此,完成了Peer&Orderer配置MSP的第一步了。
第二步詳細過程
第一步的主要目的,是準備相關的證書和簽名。第二步,就是要將這些檔案路徑配置到Peer | Orderer的配置檔案中。這樣,在啟動節點時,就能夠找到相應的證書和簽名進行認證。
在節點的配置檔案中,
peer對應的是core.yaml檔案;
orderer對應的是orderer.yaml。
我們需要在這些配置檔案中指定mspconfig資料夾的路徑和節點MSP的MSP識別符號。
那麼到底如何來指定呢?
下面將逐一講解:
1>peer節點配置
當Peer節點作為服務端啟動時,會按照優先順序從高到低的順序依次嘗試從命令列引數、環境變數或配置檔案中讀取配置資訊。這裡,我們主要通過配置檔案的方式來對Peer進行配置。
讀取配置資訊的順序
- Peer節點預設的配置檔案讀取路徑為$FABRIC_CFG_PATH/core.yaml;
- 如果沒找到,則嘗試查詢當前目錄下的./core.yaml檔案;
- 如果還沒有找到,則嘗試查詢預設的/etc/hyperledger/fabric/core.yaml檔案。
在結構上,core.yaml檔案中一般包括logging、peer、vm、chaincode、ledger五大部分,其中,與MSP配置相關的主要是peer部分。下面見介紹如何對Peer部分進行配置,實現MSP。
peer部分包括了許多跟服務直接相關的核心配置,內容也比較多,包括msp配置、gossip、events、tls等多個配置部分,如下圖所示:
下面將著重介紹通用配置中的MSP配置:
開啟core.yaml檔案,以下部分是關於MSP的配置
配置------>·mspConfigPath:
MSP目錄所在的路徑,可以為絕對路徑,或相對配置目錄的路徑,一般建議為/etc/hyperledger/fabric/msp;本例中,寫的是相對路徑msp
配置------->localMspId:
Peer所關聯的MSP的ID,一般為組織單位名稱,需要與聯盟配置中的名稱一致;
到這裡,就已經完成了對Peer節點的LocalMSP配置。
2>Orderer節點配置
orderer節點對應的配置檔案是orderer.yaml。
Orderer節點可以組成叢集來在Fabric網路中提供排序服務。類似地,支援從命令列引數、環境變數或配置檔案中讀取配置資訊。
當從環境變數中讀入配置時,需要以ORDERER_字首開頭,例如配置檔案中的general.ListenAddress項,對應到環境變數ORDERER_GENERAL_LISTENADDRESS。
在結構上,orderer.yaml檔案中一般包括General、FileLedger、RAMLedger、Kafka四大部分,其中,涉及MSP配置的部分在General。General部分的配置如下所示:
其中,LocalMSPDir,LocalMSPID為配置本地msp的主要部分。進入該orderer.yaml檔案,該部分如下圖所示:
配置------>LocalMSPDir:
MSP目錄所在的路徑,可以為絕對路徑或相對路徑,一般建議為$FABRIC_CFG_PATH/msp;
配置------>localMspId:
Orderer所關聯的MSP的ID,需要與聯盟配置中的組織的MSP名稱一致;
到這裡,就已經完成了對Orderer節點的LocalMSP配置。
四、總結
在這一篇文章中,我們發現Fabric的配置是一門很大的學問。這裡,對msp的實現,就是通過配置檔案來實現的。
我們通過相關工具,生成了系統中所需要的證書和簽名等。
這一部分涉及crypro-config.yaml檔案。
利用該配置檔案,我們可以定義網路拓撲,以及生成相關證書。
生成MSP相關證書和檔案後,我們對Peer和Orderer進行了MSP配置。這一部分也是通過配置檔案來實現的。
core.yaml 是Peer節點的配置檔案,通過對Peer部分的mspConfigPath和localMspId欄位,來完成msp配置。
Orderer.yaml是Orderer節點的配置檔案,通過對General部分的LocalMSPDir和localMspId欄位,來完成msp配置。
到目前為止,我們瞭解了MSP的基本組成,基本功能,以及對Peer&Orderer節點的配置。
總結下來,MSP的peer&Orderer節點配置就是,在每一個Peer節點和排序服務節點上設定MSP目錄,放入相關的證書和簽名公私鑰,然後在對應的配置檔案中,設定msp檔案路徑。Peer節點和排序服務節點就有了簽名證書,在通道節點之間傳輸資料時,要驗證節點的簽名,從而實現證書的驗證和簽名。
org1.example.com/
├── ca # 存放組織Org1的根證書和對應的私鑰檔案,預設採用EC演算法,證書為自簽名。組織內的實體將基於該根證書作為證書根。
│ ├── ca.org1.example.com-cert.pem
│ └── dfb841b77804d726eea25231ae5e89a31901ca0538688a6d764731148f0bdc5b_sk
├── msp # 存放代表該組織的身份資訊。
│ ├── admincerts # 組織管理員的身份驗證證書,被根證書籤名。
│ │ └── Admin@org1.example.com-cert.pem
│ ├── cacerts # 組織的根證書,同ca目錄下檔案。
│ │ └── ca.org1.example.com-cert.pem
│ └── tlscacerts # 用於TLS的CA證書,自簽名。
│ └── tlsca.org1.example.com-cert.pem
├── peers # 存放屬於該組織的所有Peer節點
│ ├── peer0.org1.example.com # 第一個peer的資訊,包括其msp證書和tls證書兩類。
│ │ ├── msp # msp相關證書
│ │ │ ├── admincerts # 組織管理員的身份驗證證書。Peer將基於這些證書來認證交易簽署者是否為管理員身份。
│ │ │ │ └── Admin@org1.example.com-cert.pem
│ │ │ ├── cacerts # 存放組織的根證書
│ │ │ │ └── ca.org1.example.com-cert.pem
│ │ │ ├── keystore # 本節點的身份私鑰,用來簽名
│ │ │ │ └── 59be216646c0fb18c015c58d27bf40c3845907849b1f0671562041b8fd6e0da2_sk
│ │ │ ├── signcerts # 驗證本節點簽名的證書,被組織根證書籤名
│ │ │ │ └── peer0.org1.example.com-cert.pem
│ │ │ └── tlscacerts # TLS連線用到身份證書,即組織TLS證書
│ │ │ └── tlsca.org1.example.com-cert.pem
│ │ └── tls # tls相關證書
│ │ ├── ca.crt # 組織的根證書
│ │ ├── server.crt # 驗證本節點簽名的證書,被組織根證書籤名
│ │ └── server.key # 本節點的身份私鑰,用來簽名
│ └── peer1.org1.example.com # 第二個peer的資訊,結構類似。(此處省略。)
│ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── keystore
│ │ │ └── 82aa3f8f9178b0a83a14fdb1a4e1f944e63b72de8df1baeea36dddf1fe110800_sk
│ │ ├── signcerts
│ │ │ └── peer1.org1.example.com-cert.pem
│ │ └── tlscacerts
│ │ └── tlsca.org1.example.com-cert.pem
│ └── tls
│ ├── ca.crt
│ ├── server.crt
│ └── server.key
├── tlsca # 存放tls相關的證書和私鑰。
│ ├── 00e4666e5f56804274aadb07e2192db2f005a05f2f8fcfd8a1433bdb8ee6e3cf_sk
│ └── tlsca.org1.example.com-cert.pem
└── users # 存放屬於該組織的使用者的實體
├── Admin@org1.example.com # 管理員使用者的資訊,其中包括msp證書和tls證書兩類。
│ ├── msp # msp相關證書
│ │ ├── admincerts # 組織根證書作為管理員身份驗證證書
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ ├── cacerts # 存放組織的根證書
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── keystore # 本使用者的身份私鑰,用來簽名
│ │ │ └── fa719a7d19e7b04baebbe4fa3c659a91961a084f5e7b1020670be6adc6713aa7_sk
│ │ ├── signcerts # 管理員使用者的身份驗證證書,被組織根證書籤名。要被某個Peer認可,則必須放到該Peer的msp/admincerts目錄下
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ └── tlscacerts # TLS連線用的身份證書,即組織TLS證書
│ │ └── tlsca.org1.example.com-cert.pem
│ └── tls # 存放tls相關的證書和私鑰。
│ ├── ca.crt # 組織的根證書
│ ├── server.crt # 管理員的使用者身份驗證證書,被組織根證書籤名
│ └── server.key # 管理員使用者的身份私鑰,被組織根證書籤名。
└── User1@org1.example.com # 第一個使用者的資訊,包括msp證書和tls證書兩類
├── msp # msp證書相關資訊
│ ├── admincerts # 組織根證書作為管理者身份驗證證書。
│ │ └── User1@org1.example.com-cert.pem
│ ├── cacerts # 存放組織的根證書
│ │ └── ca.org1.example.com-cert.pem
│ ├── keystore # 本使用者的身份私鑰,用來簽名
│ │ └── 97f2b74ee080b9bf417a4060bfb737ce08bf33d0287cb3eef9b5be9707e3c3ed_sk
│ ├── signcerts # 驗證本使用者簽名的身份證書,被組織根證書籤名
│ │ └── User1@org1.example.com-cert.pem
│ └── tlscacerts # TLS連線用的身份證書,被組織根證書籤名。
│ └── tlsca.org1.example.com-cert.pem
└── tls # 組織的根證書
├── ca.crt # 組織的根證書
├── server.crt # 驗證使用者簽名的身份證書,被根組織證書籤名
└── server.key # 使用者的身份私鑰用來簽名。