hyperledger Fabric 1.0基於PKI體系,生成數字證書以標識用戶的身份。每一個身份和成員管理服務提供商(Membership Service Provider,MSP)的編號進行關聯。mysql
MSP(Membership Service Provider):成員管理服務提供商,是Hyperledger Fabric1.0中引入的一個組件。目的:抽象化各成員之間的控制結構關係。sql
MSP將證書頒發,用戶認證,後臺的加密機制和協議都進行了抽象。網絡
每一個MSP能夠定義本身的規則,包括:身份認證,簽名生成和認證。ide
每一個Hyperledger Fabric 1.0區塊鏈網絡可引入一個/多個MSP來進行網絡管理。這樣即將成員自己和成員之間的操做、規則、流程都模塊化了。模塊化
//MSP成員身份及身份標識符定義 type identity struct{ id *IdentityIdentifier //身份標識符 cert *509.Certificate //x.509證書 pk bccsp.key //公鑰 msp *bccspmsp //所屬的MSP } type IdentityIdentifier struct{ Mspid string //MSP標識 Id String //身份編號 }
說明:區塊鏈
成員身份是基於標準的X.509證書的加密
得用PKI體系給每一個成員頒發數字證書,結合所屬的MSP進行身份認證和權限控制。spa
根CA證書(root Certificate)是自簽名的證書,用根CA證書的私鑰簽名生成的證書還能夠簽發新的證書,造成一個樹型結構。3d
中間CA證書(Intermediate Certificate)是由其餘CA證書籤發的,也可利用本身的私鑰簽發新的證書。code
簽發證書是一個信任背書的過程,從根CA證書到最終用戶證書造成一個證書信任鏈。
在PKI體中,可利用CRL/OCSP管理證書有效性。
超級帳本中,MSP利用PKI的部份特性來管理證書的有效性。
(1)MSP標識的檢查:
身份證書都是和MSP綁定的,必須有相同的MSP標識才能驗證證書的有效性。
peer節點的Gossip通訊和部分系統鏈碼的調用都要求調用者身份和本地MSP標識相同。背書請求在通道管理策略驗證的時候也會檢查MSP成員是否有寫入權限。
(2)證書路徑檢查:
除MSP標識檢查,還會對證書籤名有效性檢查,主要是:
證書路徑檢查、校驗根CA證書、中間CA證書是否有效,是否有從身份證書到可信根CA證書的有效路徑。
注:在證書驗證時並不校驗證書的有效期,會強制設置當前時間爲證書起始時間的下一秒,這確保有效期驗證經過。
MSP目錄下的cacerts和intermediatecerts子目錄簽發的證書都是有效的,證書校驗的時候須要檢查是否有到可信根證書的有效路徑。
(3)CRL的檢查
最後檢查證書是否被吊銷,現僅支持CRL不支持OCSP。
CRL會包含在本地MSP的crls子目錄下,是由CA證書籤發的包含被吊銷證書序列號的證書文件。
在通道的MSP配置中,也會包含CRL列表。在更新通道配置時可發佈吊銷的證書。
在每個Peer節點的排序服務節點上設置MSP目錄後,Peer節點和排序服務節點就有了簽名證書。在通道節點之間傳輸數據時,要驗證節點的簽名。
爲了可以標識MSP,每一個MSP須要指定一個名稱,如org1,org2等。
在通道的MSP成員規則中能夠用MSP名稱來表明一個聯盟(Consortium)、組織(Organization)或部門(Organization Division)
若在創世區塊中檢測到兩個MSP用同一個MSP名稱,則排序服務節點將啓動失效。
MSP默認實現是基於X.509證書格式的,根據RFC5280文檔內容,給一些MSP配置參考。
節點須要進行以下配置才能使用MSP進行簽名/驗籤
【1】。用於節點簽名的簽名密鑰(目前只支持ECDSA密鑰)
【2】。經過MSP驗證是有效的X.509證書將做爲節點證書
MSP有效身份須要知足條件:
【1】身份證書符合X.509證書標準,且有到根CA證書/中間CA證書可驗證的證書路徑
【2】身份證書不在吊銷列表中
【3】在X.509證書的OU字段至少包含一個在MSP中配置的部門
和普通X.509證書不一樣的是:MSP身份證書是沒有有效期的,除非被添加到證書吊銷列表中。
可選的Fabric CA服務,這是官方提供數字證書管理的一個默認實現。
【1】。基於mysql的數據存儲
【2】。基於PostgreSQL的數據存儲
【3】。基於LDAP的數據存儲
【1】。Fabric CA客戶端的使用
【2】。Fabric CA的RESTful接口