Hyperledgerfabric账号CA篇(七)Hyperledger fabric 账号 CA篇(七)
1、Fabric账号
1.1、含义
根据PKI规范⽣成的⼀组证书和密钥⽂件
1.2、作⽤
保证记录在区块链的数据具有不可逆,防篡改
Fabric中每条组织交易都会加上发起者的标签(签名证书),同时⽤发起⼈的私钥进⾏加密
如果交易需要其他组织的节点提供背书功能,那么背书节点也会在交易中加⼊⾃⼰的签名
1.3、适⽤场景
启动order节点
启动peer节点
创建通道
2、证书⽂件
2.1、组织证书
liuhui@liuhui-ThinkPad-T550:~/fabricsample/crypto-config/ample$ tree msp
msp
├── admincerts
├── cacerts
│└── ample-cert.pem
├── config.yaml
└── tlscacerts
└── ample-cert.pem
3 directories, 3 files
2.2、节点证书
liuhui@liuhui-ThinkPad-T550:~/fabricsample/crypto-config/ample/peers$ 1.example/ ample/
├── msp
│├── admincerts
│├── cacerts
││└── ample-cert.pem
│├── config.yaml
│├── keystore
││└── cf8d9658215ef005bc979d4ef3402dfafdbee7762b131eaaa33031c97d03ae66_sk
│├── signcerts
││└── ample-cert.pem
│└── tlscacerts
│└── ample-cert.pem
└── tls
├── ca.crt
├──
└── server.key
7 directories, 8 files
msp⽂件夹中内容主要⽤于存放签名⽤的证书⽂件和加密⽤的私钥⽂件
admincerts:管理员证书
cacerts:根CA服务器的证书
keystore:节点或者账号的私钥
signcerts:符合X.509的节点或者⽤户证书⽂件
tlscacerts:TLS根CA的证书
tls⽂件夹:存放加密通信相关的证书⽂件
2.3、⽤户证书
liuhui@liuhui-ThinkPad-T550:~/fabricsample/crypto-config/ample/users/ample$ tree msp
msp
├── admincerts
├── cacerts
│└── ample-cert.pem
├── config.yaml
├── keystore
│└── d6f96d6351b1504e31b7612919fb70f2c5a889f8cda4627c4bb5f3c542f3026d_sk
├── signcerts
│└── ample-cert.pem
└── tlscacerts
└── ample-cert.pem
5 directories, 5 files
3、Fabric-CA
3.1、含义及架构解析
fabric-ca项⽬是专门为了解决fabric账号问题⽽发起的⼀个开源项⽬,它解决了fabric账号⽣成的问题,f
abric-ca项⽬由fabric-server和fabric-client两个模块组成,其中fabric-server在fabric中占有⾮常重要的作⽤,我们使⽤cryptogen命令可以同配置⽂件⽣成⼀些账号信息,但是如果有动态添加账号的需求,就⽆法满⾜,所以引⼊了fabric-ca
![](/home/liuhui/⽂档/hyperledge Fabric/fabric-ca.png)
fabric-CA提供了两种访问⽅式调⽤server服务
通过fabric-client调⽤
通过SDK调⽤(node.js,java,go)
通常情况下,⼀个组织会对应⼀个fabric-server服务器,根CA可以对⼦CA进⾏授权,便可以在⼦CA中注册账号
当fabric中多个组织时,要在每个组织中部署⼀个fabric-ca服务器,给当前组织注册新⽤户
3.2、安装Fabric CA
安装libtool 与libltdl-dev依赖包
$ sudo apt update
$ sudo apt install libtool libltdl-dev
安装服务端与客户端(两种⽅式,我是第⼆种⽅式安装成功的,第⼀种下载失败)
(1)直接下载⼆进制可执⾏⽂件
$ go get -u github/hyperledger/fabric-ca/cmd/...
命令下载后会在$GOPATH/bin⽬录下产⽣两个可执⾏⽂件
fabric-ca-client
fabric-ca-server
设置环境变量,便于在任何路径下可以直接使⽤这两个命令
export PATH=$PATH:$GOPATH/bin
(2)从源码编译安装
从github下载fabric-ca源码到hyperledger⽬录下
cd $GOPATH/src/github/hyperledger/
git clone github/hyperledger/fabric-ca.git
cd fabric-ca
#进⾏源码编译
make fabric-ca-server
make fabric-ca-client
当前⽂件下会编译出⼀个bin⽂件夹,最后⼀步将该⽂件夹添加到环境变量,保证⽂件夹下命令可以在任何路径下执⾏。
3.3、启动Fabric-CA
在docker-compose配置⽂件中添加CA服务,然后运⾏Shell命令启动
在docker-compose启动时使⽤的配置⽂件docker-compose.yaml中添加如下配置项
注意:有⼏个组织加⼏个CA
#配置项中的证书⽂件和私钥⽂件都需要去相应的组织中寻进⾏修改
services:
>>>>>>##添加的内容>>>>>>>##
image: hyperledger/fabric-ca          #镜像⽂件
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server                      #fabric-ca容器中的home⽬录
- FABRIC_CA_SERVER_CA_ample                              #fabric-ca服务器的名字,与前⾯⼀致
#fabric-ca服务器证书⽂件,确定当前fabric-ca属于哪个组织
-
FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/1.example-cert.pem
#fabric-ca服务器的私钥⽂件
- FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk    ports:              #绑定的端⼝
- "7054:7054"
#启动fabric-ca-server服务命令
#参数:admin:adminpw(可修改)
#---admin:fabric-ca-server的登陆⽤户名
#---adminpw: fabric-ca-server的登陆密码
command: sh -c 'fabric-ca-server start -b admin:adminpw'
volumes:
- ./crypto-config/ample/ca/:/etc/hyperledger/fabric-ca-server-config
container_name: ca.example              #容器名
networks:
- basic
运⾏docker-compose容器
liuhui@liuhui-ThinkPad-T550:~/fabricsample$ docker-compose -f docker-compose-cli.yaml ps
Name                                Command                State          Ports
--------------------------------------------------------------------------------
cli                                                /bin/bash                      Up
<1.example  peer node start          Up      0.0.0.0:7051->7051/tcp
<2.example  peer node start          Up      0.0.0.0:9051->9051/tcp
<1.example  peer node start          Up      0.0.0.0:8051->8051/tcp
<2.example  peer node start          Up      0.0.0.0:10051->10051/tcp
3.4、Fabric CA 命令交互
fabric-ca-server已经启动,最简单的⽅式是使⽤fabric-ca-client客户端⼯具进⾏交互
fabric-ca-client命令与服务端进⾏交互,包括5个⼦命令
enroll :注册获取ECert
register : 登记⽤户
getcainfo : 获取CA服务的证书链
reenroll : 重新注册
revoke: 撤销签发的证书⾝份
version:Hyperledger Fabric CA客户端版本信息
3.4.1、注册初始化管理员⽤户
在fabric CA服务端启动时有⼀个管理员⽤户,需要先注册初始化的管理员⽤户,获取注册证书以后才能进⾏后续的操作
设置fabric-ca-client所在路径
设置Hyperledger Fabric CA 客户端主⽬录
调⽤在7054端⼝运⾏的Fabric CA服务器来注册ID为admin且密码为adminpw的标识(在之前docker-compose.yaml配置⽂件已经指定)
export PATH=$PATH:$GOPATH/bin
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client enroll -u admin:pass@localhost:7054
如果名称和密码不匹配,注册会出现⼀下错误
Error:Response from server: Error Code: 20 - Authorization failure
执⾏成功后⽣成的⽂件结构如下:
liuhui@liuhui-ThinkPad-T550:~$ tree fabric-ca/clients/
fabric-ca/clients/
├── admin
│├── fabric-ca-client-config.yaml
│└── msp
│├── cacerts
││└── localhost-7054.pem
│├── IssuerPublicKey
│├── IssuerRevocationPublicKey
│├── keystore
││├── 813d2ffbd9a55c4ead6b5a93207412fb283f04986b3e927df49106203060f5fc_sk
││└── da9b3f07279f2ca03e1002ccb10b1cf3bed485ed26f30b37491b9072a07974d4_sk
│├── signcerts
││└── cert.pem
│└── user
git设置用户名和邮箱3.4.2、登记⼀个新⽤户
只有已经注册的⽤户才可以发起登记(register)请求,发起登记请求的⽤户称为登记员,登记新⽤户的时候还需要有相应的权限,Fabric CA服务端在接收到登记请求时需要进⾏如下⼏个⽅⾯的检查
1. 登记员需要有登记⽤户的登记权限,登记员可以登记的⽤户类型记录在hf.Registrar.Roles属性中,如果属性保存的内容为:
peer,app,user。则登记员可以登记peer,app,user类型的⽤户,但不能登记orderer类型的⽤户。
2. 登记员只能登记⾃⼰归属范围内的⽤户,⽐如登记员归属为a.b,可以登记归属a.b.c的⽤户,不能登记a.c的⽤户。如果不
指定登记⽤户的归属,则默认和登记员的归属⼀样
3. 登记的⽤户属性需要满⾜以下条件
登记的⽤户属性需要包含在登记员的⽤户属性“hf.Registar.Attributes”中,⽬前只⽀持“*“通配符,⽐如a.b.*表⽰所有a.b开
头的属性名称
如果登记的⽤户也有hf.Registar.Attributes属性,需要其是登记员⽤户属性hf.Registar.Attributes的⼦集。⽐如登记员属性
a.b.*,则登记⽤户可以为a.b.c,但不可以为a.b
接下来使⽤admin的⾝份注册⼀个⾝份:
id为admin2
affiliation为org1.department1
属性名字为hf.Revoker,对应的值为true
属性名字为admin,对应的值为true
其中对于属性admin=true,后缀为ecert表⽰这条admin属性将会添加到⽤户注册证书中,实现访问控制。
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client register --id.name admin2 --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,admin=true:ecert'
命令运⾏后会输出该⽤户密码
...
Password: LlkagjaljjgEWj
如果想使⽤指定的密码,则需要在命令中添加选项--id.secret password即可
需要注意:登记时可以将多个属性指定为 -id.attrs标志的⼀部分,每个属性必须以逗号分隔。对于包含逗号的属性值,必须将该属性封装在双引号中。
3.4.3、登记注册节点
登记peer或orderer节点的操作与登记⽤户⾝份类似,可以⽤过-M指定本地MSP的根路径以在其下存放证书⽂件。
登记⼀个名为peer1的节点,密码为peer1pw
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client register \
--id.name peer1 \
--id.type peer \
--id.affiliation org1.department1 \
--id.secret peer1pw
注册节点
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
fabric-ca-client enroll \
-u peer1:peer1pw@localhost:7054 \
-M $FABRIC_CA_CLIENT_HOME/msp
命令成功后会在指定MSP⽂件下⽣成私钥和证书

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论