目录
Fabric-ca项目是专门为解决Fabric账号问题而发起的一个开源项目,它非常完美地解决了Fabric账号生成的问题。由Fabric-ca-server和Fabric-ca-client两个模块组成。Fabric-ca-server在Fabric-ca项目中占有非常重要的作用。
一、Fabric-ca的编译和安装
第一步:安装系统组件包
sudo apt-get install libtool libltdl-dev
第二步:下载源代码并编译
cd $GOPATH/src/github.com/hyperledger/
git clone http://gerrit.hyperledger.org/r/fabric-ca
cd fabric-ca/
#编译server和client
make fabric-ca-server
make fabric-ca-client
第三步:安装编译好的可执行文件
cd $GOPATH/github.com/hyperledger/fabric-ca/bin/
cp $GOPATH/github.com/hyperledger/fabric-ca/bin/* /usr/local/bin/
第四步:检查是否安装成功
fabric-ca-server version
fabric-ca-client version
二、 Fabric-ca-server的启动和配置
fabric-ca-server启动之后是以守护进程的方式存在,可以通过fabric-ca-client或者其他实现了通信协议的客户端发起请求。faric-ca-server有三种方式设置配置信息,分别是启动参数、环境变量、配置文件。
1. Fabric-ca-server命令行选项
fabric-ca-server模块有三个子命令,分别是:
- init: 初始化fabric-ca服务器
- start: 启动fabric-ca 服务器
- version: 显示版本
2. Fabric-ca-server的选项
3. Fabric-ca-server初始化
fabric-ca-server可以通过配置文件进行参数设置。执行fabric-ca-server的子命令init,可以初始化生成相关的配置文件。在执行init命令之前需要创建相关的文件夹,本文创建如下文件夹(实际可随意指定文件夹路径):
mkdir -p ~/go/src/github.com/hyperledger/fabric-ca-server
fabric-ca-server服务器初始化:
cd ~/go/src/github.com/hyperledger/fabric-ca-server
fabric-ca-server init -b admin:adminpw
fabric-ca-server初始化命令执行之后,会在当前目录下生成相应的配置文件,这些文件的名字和作用如下:
fabric-ca-server-config.yaml:配置文件
fabric-ca-server.db:数据库文件(数据库选择sqlite3时有效)
ca-cert.pem:证书文件
msp:私钥文件夹
4. Fabric-ca-server启动
编辑好配置文件之后,启动命令如下:
fabric-ca-server start -H '/home/yulin/go/src/github.com/hyperledger/fabric-ca' --boot admin:adminpw
三、 Fabric-ca-client的使用
fabric-ca-server提供了一组RESTAPI接口供第三方应用程序调用。fabric-ca-client对这些RESTAPI接口进行了封装,只需设置简单的参数便可以完成账号注册、账号授权等操作。
1. Fabric-ca-client模块子命令
- enroll: 登记账号
- gencrl: 撤销证书
- gencsr: 创建证书签名
- getcacert: 获取CA
- reenroll: 重新登记账号
- register: 注册一个新账号
- revoke: 撤销一个账号
- version: 显示版本信息
2. Fabric-ca-client模块参数选项
fabric-ca-client和fabric-ca-server模块一样,所有子命令公用一组全局选项,不同的子命令需要的选项是不一样的。fabric-ca-client模块的选项及其选项的作用如下所示:
(1)基本管理命令
--caname: #CA服务器的名称
-H,--home: #客户端的目录,用来存放客户端相关的文件,默认为"~/.fabric-ca-client"
-M, --mspdir: #客户端的账号文件目录,默认为"msp"
-d, --debug: #将客户端的日志设为debug模式
-u, --url: #fabric-ca-server地址,默认为0.0.0.0:7054
(2)账号登记相关命令
--enrollment.attrs: #账号登记请求中的属性
--enrollment.label: #账号登记请求中HSM相关的标签
--enrollment.profile: #登记请求中的profile
(3)账号注册
--id.affiliation: #账号注册时组织部门信息
--id.attrs: #账号注册时属性列表
--id.maxenrollments: #当前注册后可以进行登记的次数,默认为-1
--id.name #账号注册时的用户名
--id.secret #账号注册时的密码
--id.type #账号注册的类型,目前支持('peer,app,user'),默认值为"user"。
(4)证书吊销
-a,--revoke.aki: #注销证书时需要的公钥
-e,--revoke.name: #注销证书时的实体名称
-r,--revoke.reason: #注销原因
-s,--revoke.serial: #注销证书的序列号
(5) CA证书签名
--csr.cn: #CA证书请求时,请求报文中的通用名
--csr.hosts: #CA签名请求时,请求报文中的主机名
--csr.names: #CA签名请求时,请求报文中的附加名称
--csr.serialnumber: #CA签名请求时,请求报文中的序列号
-m,--myhost: #CA签名请求时,请求报文中请求主机名称,默认值是本地主机
(6)TLS通信
--tls.certfiles: #TLS通信模式下的证书文件,PEM文件格式。
--tls.client.certfile: #TLS通信模式下客户端的文件,PEM文件格式。
--tls.client.keyfile: #TLS通信模式下客户端的私钥文件。
(7)常用命令
注册账号
fabric-ca-client register --id.name peer2 --id.type peer --id.affiliation org1.department1 --id.secret peer2wd -u http://hocalhost:7054
载入账号信息
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054 -M '/home/yulin/go/src/github.com/hyperledger/fabric-client'
获取CA服务器的证书
fabric-ca-client getcacert -u http://localhost:7054 -M ~/go/src/github.com/hyperledger/testuser/msp
四、将fabric-ca-server集成到现有项目中
Fabric-ca是Fabric的cryptogen模块的有力补充,在实际的项目中占有非常重要的作用。在fabric项目中一般先采用cryptogen模块生组织、peer节点、order节点等模块的账号文件,但是如果项目中需要动态生成用户账号文件,这个时候Fabric-ca能够提供更好的帮助为了让Fabric-ca能够动态的为制定的组织生成用户账号,需要将fabric-ca和相关的组织进行绑定。
1. 绑定fabric-ca-server到现有组织
这里我们将fabric-ca-server绑定到前面【Hyperledger Fabric入门】(一) 快速运行一个简单的Fabric网络1的org1中。
首先打开fabric-ca-server的配置文件fabric-ca-server-config.yaml,在配置文件中找到如下内容:
ca:
# Name of this CA
name:
# Key file (is only used to import a private key into BCCSP)
keyfile:
# Certificate file (default: ca-cert.pem)
certfile:
# Chain file
chainfile:
然后进入【Hyperledger Fabric入门】(一) 快速运行一个简单的Fabric网络1存放org1相关的证书的文件夹,执行tree -L 2查看账号信息:
$ cd '/home/yulin/blockchain/fabric/Hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com'
$ tree -L 2
修改fabric-ca-server的配置文件fabric-ca-server-config.yaml中的相关配置如下:
ca:
# Name of this CA
name: ca-org1
# Key file (is only used to import a private key into BCCSP)
keyfile: /home/yulin/blockchain/fabric/Hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/ca/priv_sk
# Certificate file (default: ca-cert.pem)
certfile: /home/yulin/blockchain/fabric/Hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem
# Chain file
chainfile: ca-chain.pem
- keyfile:对应ca文件夹中文件名后缀为_sk的文件。
- certfile:对应ca文件夹中文件名为ca.org1.example.com-cert.pem的文件。
通过上述步骤fabric-ca-server就被绑定到组织org1中了。
2. 通过客户端从已经绑定的fabric-ca-server中生成账号
第一步:设置Fabric-ca-client环境变量
创建一个目录存放fabric-ca-client的账号(msp)文件。
mkdir ~/go/src/github.com/hyperledger/fabric-client
目录创建完后,利用管理员账户和密码注册,获取管理员账户(msp)的整数文件。
export FABRIC_CA_CLIENT_HOME=$GOPATH/src/github.com/hyperledger/fabric-client
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054 -M ~/go/src/github.com/hyperledger/fabric-client
注:fabric-ca-server需要启动。
第二步:注册账号
管理员登记后,注册一个用户名为user_test, 密码为user2wd的账号。命令如下:
$ fabric-ca-client register --id.name user_test --id.type user --id.affiliation org1.department1 --id.secret user2wd -u http://localhost:7054 -H ~/go/src/github.com/hyperledger/fabric-client
2021/03/28 15:26:26 [INFO] Configuration file location: /home/yulin/go/src/github.com/hyperledger/fabric-client/fabric-ca-client-config.yaml
Password: user2wd
第三步:载入账号
将上一步注册的账户user_test加载到本地,首先需要在本地创建一个目录用来存放从服务器下载的新用户的证书,目录可以是任何目录。本文目录如下:
mkdir ~/go/src/github.com/hyperledger/testuser
进入上面的目录,登记账号user_test,并将账号文件保存在-M指定的目录中。
$ fabric-ca-client enroll -u http://user_test:user2wd@localhost:7054 -M ~/go/src/github.com/hyperledger/fabric-client/testuser/msp
2021/03/28 15:31:33 [INFO] generating key: &{A:ecdsa S:256}
2021/03/28 15:31:33 [INFO] encoded CSR
2021/03/28 15:31:33 [INFO] Stored client certificate at /home/yulin/go/src/github.com/hyperledger/fabric-client/testuser/msp/signcerts/cert.pem
2021/03/28 15:31:33 [INFO] Stored root CA certificate at /home/yulin/go/src/github.com/hyperledger/fabric-client/testuser/msp/cacerts/localhost-7054.pem
2021/03/28 15:31:33 [INFO] Stored Issuer public key at /home/yulin/go/src/github.com/hyperledger/fabric-client/testuser/msp/IssuerPublicKey
2021/03/28 15:31:33 [INFO] Stored Issuer revocation public key at /home/yulin/go/src/github.com/hyperledger/fabric-client/testuser/msp/IssuerRevocationPublicKey
第四步:复制管理员签名和公用TLS证书文件
复制命令如下:
$ cp /home/yulin/blockchain/fabric/Hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/* /home/yulin/go/src/github.com/hyperledger/fabric-client/testuser/msp/admincerts
$ cp /home/yulin/blockchain/fabric/Hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/* /home/yulin/go/src/github.com/hyperledger/fabric-client/testuser/tls
第五步:查看账号
通过观察文件结构发现和cryptogen模块生成的账号文件是一致的,只是文件名不一样,这是正常的。