Fabric-CA使用

  1. 下载fabric-ca项目
  • 首先安装一些软件
sudo apt install libtool libltdl-dev
  • 使用go get命令安装项目
# 官方文档上就是这么写的
go get -u github.com/hyperledger/fabric-ca/cmd/...

如果你go get没有成功,那么需要手动从github上克隆一个项目

git clone https://github.com/hyperledger/fabric-ca.git

这里我切换到了fabric-ca的1.4版本进项使用

git checkout release-1.4
  1. 编译fabric-ca-server和fabric-ca-client
  • 这里我没有使用docker,而是直接使用编译好的两个二进制文件进行实验
cd fabric-ca/
make fabric-ca-server
make fabric-ca-client
  1. 设置两个二进制文件可以在任意目录下调用
  • 方法一:直接将编译好的两个二进制文件拷到/usr/bin目录下
cp fabric-ca-server /usr/bin
cp fabric-ca-client /usr/bin
  • 方法二:在/usr/bin目录下新建链接文件指向这两个文件
  1. 初始化服务器
# serveradmin是server端管理员账号,123456是密码
fabric-ca-server init -b serveradmin:123456

Fabric-CA使用_第1张图片
初始化成功,如图所示。

  1. 后台启动服务器
# 后台运行server端,并且重定向日志信息到指定文件
fabric-ca-server start -b serveradmin:123456 > /root/fabric-ca/server.out 

Fabric-CA使用_第2张图片

  1. 管理员用户登录
  • 为了避免文件零散,便于管理,我们设定这个管理员的文件存储路径:
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
  • 关于设置Fabric-Ca客户端的主文件夹,优先级由高到低排序:
  • 通过命令行设置参数--home设置。
  • 如果设置了FABRIC_CA_CLIENT_HOME环境变量,则使用该环境变量作为主文件夹。
  • 如果设置了FABRIC_CA_HOME环境变量,则使用该环境变量作为主文件夹。
  • 如果设置了CA_CFG_PATH环境变量,则使用该环境变量作为主文件夹。
  • 如果以上方法都没有设置,则$HOME/.fabric-ca-client将作为主文件夹。
  • 使用命令登录:
fabric-ca-client enroll -u http://serveradmin:123456@localhost:7054

在这里插入图片描述
在admin目录下会有这些文件生成:

.
├── fabric-ca-client-config.yaml
└── msp
    ├── IssuerPublicKey
    ├── IssuerRevocationPublicKey
    ├── cacerts
    │   └── localhost-7054.pem     #CA服务器的根证书,只不过换了一个名字
    ├── keystore
    │   └── 7ec84cbc25c20600ba98bf2bafb9c695ad57e392a57fb9f33b51fc493601a432_sk  #当前用户的秘钥信息
    ├── signcerts
    │   └── cert.pem   #当前用户的证书
    └── user
  1. 注册新的用户
  • 注册一个身份
    通过Fabric-CA注册新的身份时,将由Fabric-CA服务器进行三个部分的权限检查确定当前用户是否具有权限进行身份的注册。

  • 注册者必须含有hf.Registrar.Roles属性,并且需要注册的身份类型必须在该属性对应的值的列表中存在。比如注册者的hf.Registrar.Roles属性中对应的值只有一个peer,那么注册者使能注册类型为peer的身份,而不能注册client,admin,orderer.如果注册者的hf.Registrar.Roles属性对应的值为*,则说明可以注册任何类型的身份。

  • 简单说就是上下级关系,比如注册者所处的部门为a.b,那么他只能注册处于a.b以及a.b.*部门的身份,而不能注册处于a.c部门的身份。如果需要注册一个最上级的部门的身份,那么需要将需要将需要注册的身份的hf.affiliation指定为.,并且注册者所处的部门也需要是最上级的部门。如果在注册身份时没有指定所属的部门,则默认被注册的身份所处的部门与注册者部门相同。

  • 如果注册者满足以下条件则可以注册带有属性的身份:

    • 对于Fabric CA中的保留属性(前缀以hf开头的):只有注册者具有这个属性并且是hf.Registrar.Attributes属性中的值的一部分。也就是说如果需要注册一个带有hf.a属性的身份,那么注册者自己也需要有这个属性,并且在注册者的hf.Registrar.Attributes属性对应的值中需要包含hf.a这个属性。并且hf.a这个属性的值是一个列表,那么被注册的身份具有的hf.a属性只能等于或者等于列表中的一个子集。另外,如果hf.a这个属性的值对应的是一个布尔值,那么需要注册者hf.a属性的值为true
    • 对于注册者自定义的属性(不是Fabric Ca中的保留属性):注册者hf.Registrar.Attributes对应的值需要包括这个属性,或者是已经注册过的模式。唯一支持的模式是以*结尾的字符串。比如注册者hf.Registar.Attributes对应的值为a.b.*,那么他可以注册的属性需要以a.b.开头。如果注册者hf.Registar.Attributes对应的值为orgAdmin,那么注册者只可以对一个身份进行添加或者删除orgAdmin属性.
    • 对于hr.Registrar.Attributes属性:一个额外的检查是该属性对应的值需要等于注册者具有的该属性对应的值,或者是注册者具有的该属性对应的值的子集。
  • 对于这些的具体解释可以看这一篇博客:博客传送门

  • 使用刚才登陆的admin身份注册一个身份:

  • enrollment idadmin2

  • 部门为org1.department1

  • 属性名字为hf.Revoker,对应的值为true

  • 属性名字为admin,对应的值为true

fabric-ca-client register  --id.name admin2  --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,admin=true:ecert'

在这里插入图片描述
其中对于属性admin=true,后缀为ecert表示这条属性将会添加到证书中,可以用来进行做访问控制的决定。这里密码没有自己设置,系统给出一个密码(gqvBHqvZrupb)。

  • 接下来在注册一个peer身份的用户:
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client register --id.name peer2 --id.type peer --id.affiliation org1.department1 --id.secret 123456

在这里插入图片描述
7. ###### 新的用户登录

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer2
fabric-ca-client enroll -u http://peer2:123456@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp

Fabric-CA使用_第3张图片
13. ###### 一些常用命令

  • 查看查看有权限查看的用户的详情:
fabric-ca-client identity list

Fabric-CA使用_第4张图片

  • 查看某一个用户的信息:
fabric-ca-client identity list --id peer1
  • 删除某一个用户
fabric-ca-client identity remove peer1

注意:在默认情况下,Fabric CA服务器是禁用身份的删除的,但可以通过设置–cfg.identities.allowremove选项启动Fabric CA服务器启用。如果未启用则会删除失败,重新启动CA服务器端,并且再次运行以上命令,发现peer1确实被删除了:

nohup fabric-ca-server start -b serveradmin:123456 --cfg.identities.allowremove --cfg.affiliations.allowremove  > /root/fabric-ca/server.out &

Fabric-CA使用_第5张图片

  • 撤销某一个用户的证书(也就是使其非法,不能正常登陆,但是用户还是存在的)
fabric-ca-client revoke -e <enrollment_id>

被撤销的用户无法登陆,但是可以在管理员的用户列表中看见这个用户。

  • 查看有权限查看的组织关系:
# 用户需要有 hf.AffiliationMgr 属性,否则报错,Error: Response from server: Error Code: 0 - User does not have attribute 'hf.AffiliationMgr'
fabric-ca-client affiliation list
# 注册一个org1的管理员,同时具有撤销证书权限与组织管理的权限
fabric-ca-client register  --id.name org1admin1  --id.affiliation org1 --id.secret 123456 --id.attrs 'hf.Revoker=true,hf.AffiliationMgr=true,hf.Revoker=true,admin=true:ecert'

登陆这个组织1的管理员然后我们使用查看组织信息的命令,因为这个是组织1的管理员,所以只能看到组织1的所有信息,如果使用server的admin就可以查看到所有的组织信息:
在这里插入图片描述

  • 修改组织信息:
    • 添加一个组织的部门:

      fabric-ca-client affiliation add org1.hdu235
      

      在这里插入图片描述

    • 修改一个部门信息

      # 必须是具有hf.Registrar.Roles属性(server管理员具有这个权限)
      fabric-ca-client affiliation modify org1.hdu235 --name org1.dep3 --force
      
    • 删除一个部门

      fabric-ca-client affiliation remove org1 --force
      

注意:在默认情况下,Fabric CA服务器是禁用身份的删除的,但可以通过设置–cfg. affiliations.allowremove选项启动FabricCA服务器启用。

你可能感兴趣的:(Fabric-CA使用)