您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Fabric CA創建用戶機制的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
在研究Fabric CA 創建用戶,的時候發現很多隱含規則
通過官方文檔,我們知道 fabric-ca 可以帶有如下幾個以hf.
開頭的屬性,我們暫且稱之為系統屬性
Name | Type | Description |
---|---|---|
hf.Registrar.Roles | List | List of roles that the registrar is allowed to manage |
hf.Registrar.DelegateRoles | List | List of roles that the registrar is allowed to give to a registree for its ‘hf.Registrar.Roles’ attribute |
hf.Registrar.Attributes | List | List of attributes that registrar is allowed to register |
hf.GenCRL | Boolean | Identity is able to generate CRL if attribute value is true |
hf.Revoker | Boolean | Identity is able to revoke a user and/or certificates if attribute value is true |
hf.AffiliationMgr | Boolean | Identity is able to manage affiliations if attribute value is true |
hf.IntermediateCA | Boolean | Identity is able to enroll as an intermediate CA if attribute value is true |
首先,我們用admin創建賬戶test_a,
命令如下:
fabric-ca-client register -d \ --id.name test_a \ --id.secret test_a_pw \ --id.type client \ --id.affiliation easypay.fabric \ --id.attrs '"hf.Registrar.Roles=client,user"' \ --id.attrs '"hf.Registrar.DelegateRoles=client,user"' \ --id.attrs '"hf.Registrar.Attributes=*"' \ --id.attrs hf.Revoker=true \ --id.attrs hf.AffiliationMgr=true \ --id.attrs hf.IntermediateCA=true \ --id.attrs hf.GenCRL=false
即,設置test_a用戶hf.GenCRL=false
,結果如下:
然后我們嘗試用test_a
賬戶分別創建以下幾個賬戶(注意是用test_a
賬戶,而不是admin
賬戶)
test_a_a,設置test_a_a用戶hf.GenCRL=true
:
fabric-ca-client register -d \ --id.name test_a_a \ --id.secret test_a_a_pw \ --id.type client \ --id.affiliation easypay.fabric \ --id.attrs '"hf.Registrar.Roles=client,user"' \ --id.attrs '"hf.Registrar.DelegateRoles=client,user"' \ --id.attrs '"hf.Registrar.Attributes=*"' \ --id.attrs hf.Revoker=true \ --id.attrs hf.AffiliationMgr=true \ --id.attrs hf.IntermediateCA=true \ --id.attrs hf.GenCRL=true
結果創建失敗,會報權限錯誤,如下所示:
test_a_b,設置test_a_b用戶hf.GenCRL=false
:
fabric-ca-client register -d \ --id.name test_a_b \ --id.secret test_a_b_pw \ --id.type client \ --id.affiliation easypay.fabric \ --id.attrs '"hf.Registrar.Roles=client,user"' \ --id.attrs '"hf.Registrar.DelegateRoles=client,user"' \ --id.attrs '"hf.Registrar.Attributes=*"' \ --id.attrs hf.Revoker=true \ --id.attrs hf.AffiliationMgr=true \ --id.attrs hf.IntermediateCA=true \ --id.attrs hf.GenCRL=false
結果同上:
test_a_c,不設置test_a_c用戶hf.GenCRL
屬性:
fabric-ca-client register -d \ --id.name test_a_c \ --id.secret test_a_c_pw \ --id.type client \ --id.affiliation easypay.fabric \ --id.attrs '"hf.Registrar.Roles=client,user"' \ --id.attrs '"hf.Registrar.DelegateRoles=client,user"' \ --id.attrs '"hf.Registrar.Attributes=*"' \ --id.attrs hf.Revoker=true \ --id.attrs hf.AffiliationMgr=true \ --id.attrs hf.IntermediateCA=true
結果創建成功,如下:
其他幾個布爾類型屬性,hf.Revoker
,hf.AffiliationMgr
,hf.IntermediateCA
,都有類似現象,即,上級id這些布爾屬性如果設置為false(或者不設置),則所創建是下級id都不能帶有對應的這個幾個布爾類型的系統屬性
hf.Registrar.Roles
的約束剛才創建的test_a身份,id.type=client
,hf.Registrar.Roles=client,user
, 如果我們用test_a注冊一個id.type=peer
或者id.type=orderer
的身份 結果會怎樣呢?大家應該都想得到,肯定是失敗,這里我就不做測試了
備注:fabric-ca 1.1 版本 hf.Registrar.Roles
屬性只支持client,user,peer,orderer
四種,1.2版本即將支持自定義角色,詳見:https://jira.hyperledger.org/browse/FAB-7882
相關資料截圖:
用 test_a 用戶創建一個 test_a_d身份,設置test_a_d屬性hf.Registrar.Roles=client,user,peer
,如下:
fabric-ca-client register -d \ --id.name test_a_d \ --id.secret test_a_d_pw \ --id.type client \ --id.affiliation easypay.fabric \ --id.attrs '"hf.Registrar.Roles=client,user,peer"' \ --id.attrs '"hf.Registrar.DelegateRoles=client,user,peer"' \ --id.attrs '"hf.Registrar.Attributes=*"' \ --id.attrs hf.Revoker=true \ --id.attrs hf.AffiliationMgr=true \ --id.attrs hf.IntermediateCA=true
結果創建失敗,如下:
可以繼續往下測試,可以發現,當test_a身份的屬性hf.Registrar.Roles=client,user
,往下用test_a身份創建的子身份的f.Registrar.Roles
屬性值都不能超過client,user
的范圍
再用 test_a 用戶創建一個 test_a_e身份,設置test_a_e 屬性id.type=peer
,如下:
fabric-ca-client register -d \ --id.name test_a_e \ --id.secret test_a_e_pw \ --id.type peer \ --id.affiliation easypay.fabric \ --id.attrs '"hf.Registrar.Roles=client,user"' \ --id.attrs '"hf.Registrar.DelegateRoles=client,user"' \ --id.attrs '"hf.Registrar.Attributes=*"' \ --id.attrs hf.Revoker=true \ --id.attrs hf.AffiliationMgr=true \ --id.attrs hf.IntermediateCA=true
結果創建失敗,錯誤信息如下:
子 id 的id.type
屬性值也受到上級id的hf.Registrar.Roles
屬性值的約束
hf.Registrar.Attributes
屬性的約束嘗試用 admin 身份 創建 test_b ,添加hf.key=value
fabric-ca-client register -d \ --id.name test_b \ --id.secret test_b_pw \ --id.type client \ --id.attrs hf.key=value
即使admin
身份hf.Registrar.Attributes=*
,還是創建失敗,結果如圖
再嘗試用 admin 身份 創建 test_c,添加hf=value
fabric-ca-client register -d \ --id.name test_c \ --id.secret test_c_pw \ --id.type client \ --id.attrs hf=value
創建成功,結果如圖
總結下來,有以下幾點規律:
上級id的hf.Registrar.Attributes
值可以約束它所創建的子級id能添加的屬性,但是帶hf.
的除外,帶hf.
開頭的會被當做系統屬性,區別對待
從上級往下,所帶的屬性約束只能是逐漸收斂的,不能發散
感興趣可以詳細研究一下源代碼 相關部分代碼可以參見:https://github.com/hyperledger/fabric-ca/blob/release-1.1/lib/attr/attribute.go
感謝各位的閱讀!關于“Fabric CA創建用戶機制的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。