Hyperledger fabric入门 day1

Hyperledger fabric入门 day1

Fabric技术特性

在Fabric之前的区块链平台如比特币或者以太坊,一般都只有一个账本,所有的记录都在一个账本中。这样导致这个账本非常大,比如现在比特币的账本已经有160G左右。

多账本特性

在Fabric中有一个被称为通道(Channel)的概念。一个通道包含若干个成员,这些成员共享账本数据并且共同维护账本。通道内所有成员共享账本数据并且共同维护账本。一个通道可以包含多个会员,一个会员也可以在权限允许的情况下加入多个通道。同时不同的通道中账本数据的格式也是不一样的,Fabric中账本的存储方式被设计成插件的形式。不同的会员可以根据自己的实际情况选择不同的数据存储方式

Fabric的账本具有以下特点

  • 使用基于Key的查询、范围查询、复合键查询来查询或更新账本。
  • 只读查询支持丰富的查询语句(CouchDB)
  • 只读的历史查询——实现数据追溯场景。
  • 交易包含读取链码键值对(读集),以及写入链码键值对(写集)的版本。
  • 交易包含所有背书节点提交至排序服务的签名
  • 交易被打包排序成区块,并通过通道从共识节点传至对等节点。
  • 对等节点通过背书政策标准来验证交易
  • 在增加区块前,需要执行版本检查以确保数据在链码执行时间段没有被篡改
  • 当交易被验证并承诺后,便不可改变
  • 每个通道的账本都包含配置区块,它定义了政策标准、访问控制列表与其他相关信息。
  • 通道包含了会员服务提供商实例,因此加密证书能传递到不同的证书颁发机构。

Fabric的智能合约

Fabric中的智能合约成为链码(Chaincode),Chaincode是一段用计算机语言编写的程序。Chaincode运行在容器中,Fabric通过Chaincode可以读取和修改账本数据,同时会把交易的日志保存在状态数据库中。Chaincode可以通过多种编程语言来开发,目前支持Go、Java、Node.js等语言。

Fabric的权限系统

Fabric和其他区块链的最大区别是:Fabric的网络是不公开的,如想进入网络中必须获取授权,因此Fabric可以说是联盟链。

在Fabric中没有采用类似POW这样的共识算法,因此成员如果想加入网络必须获取授权,否则不论算力多大都无法进入网络。为了解决成员授权加入的问题,Fabric中有一个会员服务系统(Membership Service Provider,MSP)。MSP是基于PKI规范而建立的一个用户证书和私钥体系。

Fabric的共识算法

Fabric支持Solo(单节点共识)、Kafka(分布式队列)和SBFT(简单拜占庭容错)三种共识方式。

Solo方法

指在单个节点中完成排序的方法,这种模式安全性和稳定性都比较差,如果单个节点出现问题,那么整个区块链系统都无法运行。因此Solo模式通常只是用在演示系统和本机开发环境中。

Kafka

是一种高吞吐量的分布式发布订阅消息系统。在Fabric的Kafka模式中,排序节点从Kafka集群里获取响应topic(Kafka的分区,用于在队列里隔离出多个数据域)的数据,以保证交易数据有序,这里借助了Kafka的分布式一致机制实现对交易的排序。同时借助Kafka,排序节点还可以进行集群,这样能有效地避免单点故障而导致整个网络崩溃的问题。

Fabric模块在系统中的作用

peer模块在Fabric系统中的作用

1.提交节点(Committer Peer)

Committer节点主要负责维护区块链的账本结构,该节点会定期从Orderer节点获取包含交易的区块,在对这些区块进行合法发行校验之后,会把这些区块加入到区块链中。Committer节点无法通过配置文件配置,当前客户端或者命令行发起交易请求的时候需要指定相关的Committer节点。

2.背书节点(Endorse Peer)

Endorse节点主要负责对交易进行校验。当Endorse节点接收到客户端发送的交易请求之后会对交易的合法性进行校验,校验成功之后会将结果反馈给客户端。Endorse节点也是无法通过配置文件指定的,而是由发起交易请求的客户端指定的。Endorse节点在组织中可以有多个。

3.Leader节点(Leader Peer)

Leader节点是负责代表组织从Orderer节点中获取区块信息。Leader节点在整个组织中只有一个。Endorse节点的产生方式是通过peer模块的配置文件core.yaml进行配置的。配置文件有两种方式制定Leader节点,分别是:自主选举和强制指定。Leader节点相关的配置信息如下所示:

# core.yaml
peer:
gossip:
userLeaderElection: true	# 是否自动选举Leader节点
orgLeader: false	# 是否代表组织从Orderer获取区块链数据
# 自主选举配置如下:
peer:
gossip:
useLeaderElection: true
orgLeader: false

自主选举的模式,系统会根据gossip协议自动在组织中选择某一个Peer节点为Leader节点。

强制指定的配置模式如下:

# core.yaml
peer:
gossip:
useLeaderElection: true
orgLeader: false

选择强制指定的模式,当前Peer节点会自动被设定为Leader节点。在强制指定方式设定Leader节点的模式中,一个组织内只能有一个固定节点作为Leader节点存在。

在实际的项目中,我们建议采用自主选举的模式。因为在该模式下,如果被选举的Leader节点发生故障,系统会自动选取另外一个节点作为Leader节点。

4.锚节点(Anchor Peer)

锚节点主要负责代表节点和其他组织进行信息交换。每个组织都有一个锚节点,锚对于组织来说非常重要,如果锚节点出现问题,那么组织和其他组织会失去联系。锚节点也是通过配置的方式指定。锚节点的配置信息在configtxgen模块的配置文件configtx.yaml中配置的。configtx.yaml文件中关于锚节点的配置信息如下:

organization:
- &Org1
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
  • Host属性:Host属性表示本组织锚节点的访问地址,可以是IP地址或者域名,建议采用域名
  • Port属性:Port属性表示本组织锚节点的访问端口。

任何组织都必须保证本组织内锚节点服务器处于可访问的状态。

orderer模块在Fabric系统中的作用

在Fabric中,orderer模块负责对不同客户就客户端发送的交易进行排序和打包。目前Orderer组件提供了两种打包模式:Solo模式和Kafka模式。其中Solo模式太简单仅用于开发模式,在生产系统中推荐用Kafka模式。orderer模块的工作原理如下:

  • 客户端向Oderer模块发送交易
  • Orderer节点对交易进行检查,如果符合条件,则将交易发送到排序队列(Solo模式在本地,Kafka模式会提交给Kafka)。
  • Orderer节点从消息队列中对取出交易并进行打包。打包之后会将相关的消息存储到本地存储中。
  • Orderer节点根据客户端代码请求,将区块链发送给客户端。

Fabric数据安全传输的方式

为了保证数据传输中的安全性,Fabric提供了一系列相关的组件和配置,这些组建和配置在Fabric中被统称为Transport Layer Security(TLS)。TLS不是Fabric中的必选项,可以通过相关的配置参数激活或者关闭。

Fabric中orderer模块TLS设置

orderer模块中TLS相关的设置主要包括配置文件和环境变量两周方式。

  1. orderer模块在配置文件中设置TLS的样例如下所示:

    General:
    TLS:
    Enabled: true
    PrivateKey: /opt/hyperledger/.../orderers/orderer.example.com/tls/server.key
    Certificate: /opt/hyperledger/.../orderers/orderer.example.com/tls/server.crt
    RootCAs:
    - /opt/hyperledger/.../orderers/orderer.example.com/tls/ca.crt
    ClientAuthEnabled: false
    ClientRootCAs:
    
  2. orderer模块在环境变量中设置TLS的样例如下所示:

    ORDERER_GENERAL_TLS_ENABLED = true
    ORDERER_GENERAL_TLS_PRIVATEKEY = /opt/hyperledger/.../orderers/orderer.example.com/tls/server.key
    ORDERER_GENERAL_TLS_CERTIFICATE = /opt/hyperledger/.../orderer/orderer.example.com/tls/server.crt
    
  3. orderer模块TLS相关配置的详细解释如下:

    • General.TLS.Enabled: TLS激活标记,true标识激活,false标识关闭。
    • General.TLS.PrivateKey: 服务器私钥文件路径。
    • General.TLS.Certificate: 服务器数字证书文件路径。
    • General.TLS.RootCAs: 根CA服务器证书文件的路径。

Fabric中peer模块TLS设置

peer模块中TLS相关的设置主要包括配置文件和环境变量两种方式。但是由于peer模块有服务器节点(peer node命令)和命令行接口两种运行模式,这两种的运行模式有写区别。

  1. peer模块作为服务器节点运行时TLS的设置

    peer模块作为服务器节点运行时,可以通过配置文件和环境变量这两种方式设置TLS相关的配置信息,这两种方式分别如下所示:

    1. 配置文件中TLS属性的设置方式

      peer:
      tls:
      enabled: true
      cert:
      file: /opt/hyperledger/.../peers/peer0.org1.example.com/tls/server.crt
      key: 
      file: /opt/hyperledger/.../peers/peer0.org1.example.com/tls/server.key
      rootcert:
      file: /opt/hyperledger/.../peers/peer0.org1.example.com/tls/ca.crt
      serverhostoverride:
      
    2. 环境变量中TLS属性的设置方式

      CORE_PEER_TLS_ENABLED=false
      CORE_PEER_TLS_CERT_FILE=/opt/hyperledger/.../peers/peer0.org1.example.com/tls/server.crt
      CORE_PEER_TLS_KEY_FILE=/opt/hyperledger/.../peers/peer0.org1.example.com/tls/server.key
      CORE_PEER_TLS_ROOTCERT_FILE=/opt/hyperledger/.../peers/peer0.org1.example.com/tls/ca.crt
      

    相关配置选项的详细解释如下所示:

    • peer.tls.enabled: TLS激活标记,true表示激活,false表示关闭。
    • peer.tls.privatekey: 服务器私钥文件路径。
    • peer.tls.certificate: 服务器数字证书文件路径。
    • peer.tls.rootCAs: 根CA服务器证书文件的路径。
  2. peer模块采用命令行工具的方式运行时TLS属性的设置

    peer模块的命令行选项中有一些操作需要和远程的peer模块服务器节点或者orderer模块进行通信,这个时候可以选择采用TLS的方式以提高安全性。以peer模块的Chaincode选项为例,采用TLS方式实例化Chaincode的命令格式如下所示:

    peer chaincode instantiate ...... --tls --cafile /opt/hyperledger/.../orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    

Fabric账号

Fabric账号是什么

Fabric中的账号实际上是根据KPI规范生成的一组证书和密钥文件。我们通常接触到的账号系统一般是由账号和密码两个属性组成的,比如常用的电子邮箱系统。在这些系统中账号和密码只是获取操作权限的工具,一旦账号和密码验证成功,后面的操作基本上就和账号密码没有什么关系了。

但是区块链系统的一个非常重要的特点是:记录在区块链中的数据具有不可逆、不可篡改的特性。在Fabric中每条交易都会加上发起者的标签(签名证书),同时用发起人的私钥进行加密。如果交易需要其他组织的节点提供背书功能,那么背书节点也会在交易中加入自己的签名。这样每一笔交易的操作过程会非常清晰并且不可篡改。鉴于传统系统中基于账号和密码的验证体系已经无法完成这样的工作,因此Fabric设计了基于PKI规范的账号系统满足这样的要求。

一个完整的Fabric账号中包括的内容如下所示:

|--- msp
|   |--- admincerts
|   |--- cacerts
|   |--- keystore
|   |--- signcerts
|   |--- tlscacerts
|--- tls
    |--- ca.crt
    |--- server.crt
    |--- server.key

每个Fabric账号包含若干证书文件和密钥文件

1.msp文件夹中的内容

msp中主要存放签名用的证书文件和加密用的私钥文件。msp中包含以下5个部分:

  • admincerts:管理员证书
  • cacerts:根CA服务器的证书
  • keystore:节点或账号的私钥
  • signcerts:符合X.509的节点或者用户证书文件
  • tlscacerts:TLS根CA的证书

2.tls文件夹中的内容

tls文件夹中存放加密通信相关的证书文件。这一组文件实际上起到了账号的作用。我们把这样一组文件成为Fabric的账号。

Fabric的官方文档把这些证书称为Membership Service Providers,简称为MSP

什么地方需要使用Fabric的账号

Fabric中Orderer、Peer、客户端SDK、CLI接口等所有操作都需要账号。Fabric中每个具体的动作,创建通道、部署Chaincode、调用Chaincode等都需要指定的账号。每个Peer向Orderer发送请求的时候也需要Peer的账号。在Fabric中如果需要新增加一个Peer节点,首先的事情是给这个Peer创建账号。

1.启动Orderer需要的账号

启动Orderer的时候我们需要通过环境变量或者配置文件给当前启动的Orderer设定相应的账号。

环境变量设置账号:

ORDERER_GENERAL_LOCALMSPDIR=/opt/hyperledger/.../orderers/orderer.example.com/msp

配置文件为General节点下面的LocalMSPDir子节点,如下所示:

General:
LocalMSPDir: /opt/hyperledger/.../orderers/orderer.example.com/msp

2.启动Peer需要的账号

启动Peer的时候我们需要通过环境变量或者配置文件给当前启动的Peer设定相应的账号。

环境变量设置账号:

export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/.../peers/peer0.org1.example.com/msp

配置文件为Peer节点下面的mspConfigPath子节点,如下所示:

peer:
mspConfigPath:/opt/hyperledger/.../peers/peer0.org1.example.com/msp

3.创建Channel需要用到的账号

Channel是Fabric中非常重要的组成部分,创建Channel的时候也是需要账号的。

环境变量设置账号:

export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/.../users/Admin@org1.example.com/msp

Orderer、Peer、Channel启动账号的路径对比:

# Orderer启动的账号路径
ordererOrganizations/example.com/orderers/orderer.example.com/msp
# Peer启动的账号路径
peerOrgnizations/org1.example.com/peers/peer0.org1.example.com/msp
# 创建Channel的账号路径
peerOrgnizations/org1.example.com/users/Admin@org1.example.com/msp

我们发现Peer和Orderer都有属于自己的账号,创建Channel使用的是用户账号。其中Peer和创建Channel的用户账号属于某个组织,而Orderer的启动账号只属于他自己。

增加新账号和用户

通过使用cryptogen模块生成账号的默认模板如下:

OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org1
Domain: org1.example.com
Template:
Count: 1
Users:
Count: 1
- Name: Org2
Domain: org2.example.com
Template:
Count: 1
Users: 
Count: 1

在配置文件中PeerOrgs节点Template子节点中有个属性Count,Count表示当前组织包含Peer节点的数目,同时也会生成相应数目的配置文件。

如果需要增加新的节点,可以给Start属性赋值上一次的Count。

如果要给默认模板的Org1新增加三个Peer节点,可以使用下面的配置:

PeerOrgs:
- Name: Org1
Domain: org1.example.com
Template:
Count: 3
Start: 1

通过上面的配置文件,cryptogen模块可以给组织Org1新增加三个Peer节点的配置文件。

Fabric账号服务器:Fabric-ca

Fabric-ca项目是专门为了解决Fabric账号问题而发起的一个开源项目,它非常完美地解决了Fabric账号生成的问题。Fabric-ca项目由Fabric-ca-server和Fabric-ca-client这两个模块组成。

Fabric-ca的编译和安装

# 安装组件包
sudo apt install libtool libltdl-dev
# 下载源码并编译
cd $GOPATH/src/github.com/hyperledger
git clone http://gerrit.hyperledger.org/r/fabric-ca
cd $GOPATH/src/github.com/hyperledger/fabric-ca
make fabric-ca-server
make fabric-ca-client
# 安装编译好的可执行文件
cd $GOPATH/src/github.com/hyperledger/fabric-ca/bin
cp $GOPATH/src/github.com/hyperledger/fabric-ca/bin/* /usr/local/bin
chmod -R 775 /usr/local/bin/fabric-ca-server
chmod -R 775 /usr/local/bin/fabric-ca-client
# 检查是否安装正确
fabric-ca-server version
fabric-ca-client version
# 显示版本信息为安装正确

fabric-ca-server的启动和配置

fabric-ca-server启动之后是以守护进程方式存在,可以通过fabric-ca-client或者实现其通信协议的客户端发起请求。fabric-ca-server有三种方式设置配置信息,分别是启动函数、环境变量和配置文件。

fabric-ca-server的命令行选项

fabric-ca-server模块有三个子命令,这三个子命令分别是:

  • init:初始化fabric-ca服务器
  • start:启动fabric-ca服务器
  • version:显示版本

fabric-ca-server的选项

  • --address:Fabric-ca服务器的监听地址(默认为“0.0.0.0”)
  • -b,--boot:系统启动对应的管理员账号和密码
  • 。。。

fabric-ca-server的初始化

除了命令行参数,fabric-ca-server还可以通过配置文件进行参数设置。执行fabric-ca-server的命令init,可以初始化生成相关的文件夹,例子:

mkdir -p /opt/hyperledger/fabric-ca-server
# fabric-ca-server服务器初始化的命令
fabric-ca-server init -b admin:adminpw

-b 参数后面的是fabric-ca-server服务器管理账号的用户名和密码

fabric-ca-server初始化命令和执行完成之后会在当前的目录下面生成相应的配置文件,这些文件的名字及其作用如下所示:

  • fabric-ca-server-config.yaml:配置文件
  • fabric-ca-server.db:数据库文件(数据库选择sqlite3时有效)
  • ca-cert.pem:证书文件
  • msp:私钥文件夹

fabric-ca-server的配置文件

fabric-ca-server的配置文件一共分为11个部分

通用配置部分

通用配置部分包含了一些公用属性,比如端口、运行模式等,具体配置信息如下所示:

port: 7054	# 监听端口号
debug: false	#是否调试
crlsizelimit: 512000
cacount:	# 支持的CA数目
cafiles:	# 相关CA配置文件
crl:
expiry: 24h	# 授权证书的有效期
tls部分

tls部分主要包含了TLS通信相关的配置,包括是否需要打开TLS通信,TLS通信的证书和私钥文件的路径等,具体配置文件如下所示:

tls:
enabled: false	# 是否启用TLS
certfile: tls-cert.pem	# TLS证书文件
keyfile:
clientauth:
type: noclientcert	# 客户端类型
certfiles:	# 客户端证书类型
ca部分

ca服务器属性的配置,包含发布证书的组织机构的名称和相关的证书文件路径等,具体配置信息如下所示:

ca:
name:	# CA的名字,如果存在多个CA服务器,不能重复
keyfile: ca-key.pem	# 私钥文件
certfile: ca-cert.pem	# 证书文件
chainfile: ca-chain.pem	# 证书链文件
registry部分

registry节点包含了客户端注册相关的信息,具体配置信息如下所示:

registry:
maxenrollments: -1
identities:	# 注册实体信息,可以有多个
- name: admin
pass: adminpw
type: client
affiliation: ""
maxenrollments: -1
attrs:
hf.Registrar.Roles: "client, user, peer, validator, auditor"
hf.Registrar.DelegateRoles: "client, user, validator, auditor"
hf.Revoker: true
hf.IntermediateCA: true
hf.GenCRL: true
hf.Registrar.Attributes: "*"

其中,maxenrollments是同一个用户名和密码允许执行enrollment的次数,-1为不限制,0表示不支持登记。

db部分

db部分包含了Fabric-ca服务器存储账号文件的数据类型的配置,Fabric-ca服务器目前支持sqlite3、postgres和mysql三种数据库,选择任何一种数据库在启动Fabric-ca服务器之前都需要安装,Fabric-ca本身不会自动安装这些数据库引擎。db部分配置示例如下:

db:
type: sqlite3	# 数据库类型
datasource: fabric-ca-server.db	# 数据库连接方式,不同数据库是不同的
tls:	# TLS加密通信配置属性
enabled: false
certfiles:
- db-server-cert.pem
client:
certfile: db-client-cert.pem
keyfile: db-client-key.pem

db部分的配置中选择不同的数据库服务器配置格式是不一样的,不同的数据库对应的配置格式是不一样的,具体配置信息如下所示:

选择sqlite3存储账号:

type: sqlite3
datasource: fabric-ca-server.db

系统启动会在启动目录下面生成数据库文件fabric-ca-server.db,数据库文件名由datasource节点设置,该文件为sqlite3的数据库文件。

选择mysql存储账号:

db:
type: mysql
datasource: root:rootpw@tcp(localhost:3306)/fabric_ca? parseTime=true&tls=custom

选择postgres存储账号:

db:
type: postgres
datasource: host=localhost port=5432 user=Username password=Password dbname=fabric_ca sslmode=verify-full

如果使用mysql或者postgres存储账号,可以选择配置采用TLS加密的方式和服务器进行通信。具体配置信息如下所示:

tls:
enabled: true	# 是否采用加密的方式和服务器进行通信
certifiles:	# TLS加密通信的证书文件
- db-server-cert.pem
client:
certfile: db-client-cert.pem	# 客户端TLS通信证书文件
keyfile: db-client-key.pem	# 客户端TLS通信私钥文件
Idap部分

Fabric-ca可以配置使用远端LDAP服务器来进行注册管理并且保存注册相关的数据,LDAP服务相关的配置信息包含在Idap节点中,具体配置信息如下:

ldap:
ldap:
enbaled: true
url: ldap://cn-admin, dc=example, dc=org:admin@localhost:10389/dc=example, dc=org
userfilter: (uid=%s)
tls:
certfiles:
- ldap-server-cert.pem
client:
certfile: ldap-client-cert.pem
keyfile: ldap-client-key.pem
affiliations部分

affiliations节点包含了组织中的部门的相关配置信息,这些配置信息在客户端SDK调用时相关的参数必须保持一致。affiliations配置信息如下所示:

affiliations:
org1: 	# 组织org1中的部门
- department1
- department2
org2:	# 组织org2中的部门
- department1

在通过Fabric的客户端SDK访问Fabric-ca服务器的时候,相关的方法需要设置affiliations的参数时,需要跟这里的配置保持一致,否则无法正确访问。

signing节点

signing节点包含了证书签发相关的配置,包括证书的到期时间等属性。signing相关的配置信息如下:

signing:
default:	# 默认的签发Ecert
usage: 	# 证书签发的作用域
- digital signature
expiry: 8760h	# 证书有效时间
profiles:
ca:		# 本节点作为父节点给下层节点签发时的模板
usage:
- cert sign
expiry: 43800h
caconstraint:
isca: true
maxpathlen: 0	# 先在中间层继续下发节点
tls:	# TLS通信相关配置
usage:
- signing
- key encipherment
- server auth
- client auth
- key agreement
expiry: 8760h
csr部分

csr节点包含了证书申请请求时需要使用的配置信息。如果当前CA服务器是作为根CA服务器存在的,那么需要设置这些属性。csr相关的配置信息如下:

csr:
cn: fabric-ca-server	# 服务器名称
names:		# 证书签发单位的基本信息
- C: US
ST: "North Carolina"
L:
O: Hyperledger
OU: Fabric
hosts:
- roberfeng-All-Series
- localhost
ca:
expiry: 13140h	# 证书有效时间
pathlength: 1	# 下一级服务器是否可以继续其下级服务器签发证书,-1为不可,取值大于0时为允许的层级数
bccsp节点

bccsp节点包含了加密算法相关的配置,在bccsp节点中可以选择相关的加密算法以及相关加密算法的证书文件。bccsp节点的配置信息如下:

bccsp:
default: SW		# 加密方式,硬件加密和程序加密
sw:
hash: SHA2
security: 256
filekeystore:
keystore: msp/keysore
intermediate部分

当前CA作为中间层时相关的配置。如果当前CA服务器需要从上级CA服务器获取授权才能工作,需要配置intermediate节点的相关属性。

intermediate:
parentserver:		# 上级CA服务器相关信息
url:
cname:
enrollment:		# 需要在上级CA服务器进行登记的信息
hosts:		# 上级CA服务器地址列表,用逗号分隔
profile: 	# 签发用的profile
label:		# 用于HSM操作的标签信息
tls: 	# TLS通信相关的属性信息
certfiles: 	# 根证书文件
client: 	# 如果启用客户端文件需要的使用到的部分
certfile: 	# 客户端证书文件
keyfile: 	# 客户端私钥文件
fabric-ca-server的启动
fabric-ca-server start -H /opt/hyperledger/fabric-ca --boot admin:adminpw

启动完成后可以通过客户端或者通过fabric-ca-client模块访问fabric-ca-server服务器

fabric-ca-client的使用

fabric-ca-server提供了一组RESTAPI接口供第三方应用程序调用。fabric-ca-client对这些RESTAPI接口进行了封装,只需设置简单的参数便可以完成账号注册、账号授权等操作。fabric-ca-client模块由一组子命令和相关的参数选项组成

fabric-ca-client模块的子命令

  • enroll:登记账号
  • gencrl:撤销证书
  • gencsr:创建证书签名
  • getcacert:获取CA链证书
  • reenroll:重新登记账号
  • register:注册一个新账号
  • revoke:撤销一个账号
  • version:显示版本信息

fabric-ca-client模块的参数选项

  • --caname:CA服务器名称
  • -H,--home:客户端的目录,用来存放客户端相关的文件(默认值为“/root/.fabric-ca-client")
  • 。。。
fabric-ca-client常用命令

注册新账号

fabric-ca-client register --id.name peer2 --id.type peer --id.affiliation org1.department1 --id.secret peer2wd -u http://localhost:7054

载入账号信息

fabric-ca-client enroll -M /usr/fabric-test1/msp -u http://peer1:peer1pw@localhost:7054

获取CA服务器的证书

fabric-ca-client getcacert -u http://localhost:7054 -M /usr/fabric-test1/msp

将fabric-ca-server绑定到现有项目中

绑定fabric-ca-server到现有组织

首先打开fabric-ca-server的配置文件fabric-ca-server-config.yaml,在配置文件中找到以下内容:

ca:
name: ca-org1
keyfile:
certfile:
chainfile: ca-chain.pem

进入生成证书的文件夹,进入存放组织org1相关证书的文件夹

将ca文件夹绑定到fabric-ca-server的配置文件中

ca:
name: ca-org1
keyfile: /opt/hyperledger/.../peerOrganizations/org1.example.com/ca/......_sk
certfile: /opt/hyperledger/.../peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem
chainfile: ca-chian.pem
  • keyfile:对应ca文件夹中文件名后缀为_sk的文件
  • certfile:对应ca文件夹中文件名为ca.org1.example.com-cert.pem的文件

通过客户端从已经绑定到fabric-ca-server中生成账号

设置fabric-ca-client环境变量

fabric-ca-client在使用前需要创建一个目录,该目录存放fabric-ca-client的账号(msp)文件,示例:

mkdir -p /opt/hyperledger/fabric-client

目录创建完成之后,利用管理员账号和密码注册,获取管理员账号(msp)的证书文件。

export FABRIC_CA_CLIENT_HOME=/opt/hyperledger/fabric-client
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054 -M /opt/hyperledger/fabric-client

注册账号

注册一个用户名为usertest,密码为user2wd的账号,注册命令如下:

fabric-ca-client register --id.name usertest --id.type user --id.affiliation org1.department1 --id.secret user2wd -u http://localhost:7054

载入账号

将上一步注册的账号usertest加载到本地,首先需要在本地创建要给目录用来存放从服务器下载的证书,目录可以时任何目录,示例:

mkdir -p /opt/hyperledger/exampleuser

在上述命令创建的目中,登记账号usertest,并将登记成功的账号的相关文件保存到指定目录中。登记账号:

fabric-ca-client enroll -u http://usertest:user2wd@localhost:7054 -M /opt/hyperledger/exampleuser/msp

复制管理员签名和公用TLS证书文件

# 复制管理账号的签名的命令
mkdir /opt/hyperledger/exampleuser/msp/admincerts
cp /opt/hyperledger/.../peerOrgnizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/* /opt/hyperledger/exampleuser/msp/admincerts

# 复制公用TLS签名证书的命令
mkdir /opt/hyperledger/exampleuser/tls
cp /opt/hyperledger/.../peerOrgnizations/org1.example.com/peers/peer0.org1.example.com/tls/* /opt/hyperledger/exampleuser/tls
posted @ 2020-03-08 01:16  NykuvL  阅读(562)  评论(0编辑  收藏  举报