Fabric CA创建用户机制的示例分析
这篇文章给大家分享的是有关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 |
现象一:Boolean类型系统属性
首先,我们用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创建用户机制的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!