区块链开源实现Hyperledge Fabric(四)

一、Fabric账号

1.1 什么是账号

Fabric账号由cryptogen命令负责生成。实际上,Fabric账号由一组证书和秘钥文件所组成。

下面是orderer节点账号的目录结构:

├── orderers
│       │   └── orderer.example.com
│       │       ├── msp
│       │       │   ├── admincerts # 管理员证书
│       │       │   │   └── [email protected]
│       │       │   ├── cacerts # 根ca服务器的证书
│       │       │   │   └── ca.example.com-cert.pem 
│       │       │   ├── keystore # 节点或者账号的私钥
│       │       │   │   └── e5eb3e35f3a4fcc95d1c084b2abdb233dec556d0b715742c99e7d0d528ad7d40_sk
│       │       │   ├── signcerts # 符合x.509的节点或者用户证书文件
│       │       │   │   └── orderer.example.com-cert.pem
│       │       │   └── tlscacerts # tls根ca证书
│       │       │       └── tlsca.example.com-cert.pem
│       │       └── tls
│       │           ├── ca.crt
│       │           ├── server.crt
│       │           └── server.key

从上面可以看出,这些证书分别存放在msp文件夹和tls文件夹中。msp文件夹中存放了签名时使用的证书文件和加密时使用的秘钥文件。tls文件夹存放了加密通信相关的证书文件。

1.2 什么地方需要使用账号

创建fabric网络时主要有以下几个地方需要使用到账号:

  • 启动orderer节点

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

# 启动Orderer节点的账号路径
ORDERER_GENERAL_LOCALMSPDIR=/home/zhongliwen/testwork/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp
  • 启动peer节点

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

# 启动peer节点的账号路径
ORE_PEER_MSPCONFIGPATH=/home/zhongliwen/testwork/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp
  • 创建通道
# 创建通道的账号路径
CORE_PEER_MSPCONFIGPATH=/home/zhongliwen/testwork/crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp

从上面配置可以发现,orderer、peer、user都有自己的账号信息。启动orderer使用orderer节点的账号,启动peer使用了peer节点的账号,创建channel使用了组织用户的账号。

1.3 Fabric-CA

1.3.1 简介

fabric-ca 项目是专门为了解决Fabric账号问题而发起的一个开源项目, 它非常完美的解决了fabric账号生成的问题。
在这里插入图片描述
fabric-ca项目由 fabric-server 和fabric-client这两个模块组成。fabric-server是服务端程序,fabric-client是客户端程序。Fabric CA提供了两种访问方式调用Server服务,一种是通过Fabric-client程序,另外一种是使用sdk(nodejs、java、go等等)执行调用。

1.3.2 配置fabric-ca

hyperledger-fabric项目已经自带了fabric-ca的功能。所以,如果要创建ca服务器,只需要在docker-compose.yaml文件的services节点下添加以下内容:

# 配置ca服务器容器
ca.example.com: # 服务名称
    image: hyperledger/fabric-ca:latest # 镜像名称:版本号 
    environment:
    	# ca容器的home目录
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
        # ca服务器的名字,自己起
      - FABRIC_CA_SERVER_CA_NAME=ca.example.com
        # ca服务器所属组织的证书路径
      - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
        # ca服务器的私钥文件路径
      - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/b47b6db60368e6e5f598a9002f4c8f93c3d36d7c25d83b4e55338c671bed9ed2_sk

    ports:
      - "7054:7054" # ca服务器绑定端口
    command: sh -c 'fabric-ca-server start -b admin:123456' # 启动fabric-ca-server服务的命令,-b参数为ca服务器登录的用户名和密码
    volumes: # 数据卷挂载
      - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config 
    container_name: ca.example.com # 容器名称,自己起
    networks:
      - byfn # 工作网络

通常情况下, 一个组织会对应一个fabric-server服务器。所以在我们例子中启动了两个ca服务,对应org1和org2两个组织。
在这里插入图片描述

1.3.3 nodejs客户端开发

下面通过nodejs实现fabric用户的创建、查询操作。

第一步:创建项目。

mkdir fabric-ca-test
cd fabric-ca-test
npm init

第二步:安装包。

npm install --save fabric-ca-client
npm install --save fabric-client
npm install --save grpc

第三步:从github.com上下载示例文件,并拷贝到fabric-ca-test目录中。
在这里插入图片描述
enrollAdmin.js:注册组织管理员;
enrollUser.js:注册组织的普通会员,注册前必须完成管理员账号的注册;
query.js:查询数据(关闭了tls功能);
query_tls.js:查询数据(开启了tls功能);
invoke.js:执行交易(关闭了tls功能);
invoke_tls.js:执行交易(开启了tls功能);

第四步:根据实际情况修改js文件的options配置信息(比如ip地址、用户ID等等)。
在这里插入图片描述

第五步:通过node xxx.js命令执行相关操作。

# 注册管理员
node enrollAdmin.js
# 注册用户
node registUser.js
# 查询a的值
node query.js
# 查询a的值(启动了tls功能)
node query_tls.js
# a向b转账10
node invoke.js
# a向b转账10(启动了tls功能)
node invoke_tls.js
发布了112 篇原创文章 · 获赞 43 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhongliwen1981/article/details/104672959