本文是在阅读《区块链开发实战-Hyperledger Fabric关键技术与案例分析》一书的同时,在实践中记录的一些实践步骤与经验分享。
Hyperledger Fabric开发实战-06 使用SDK
Hyperledger Fabric是一个联盟链,其特点是非授权用户不能接入,因此,Fabric有严格的帐号体系,用来保证其不可篡改的特性。
在之前的例子中,我看可以看到不管是启动Orderer节点和Peer节点,还是创建Channel,都需要设置msp,在规划系统的时候,虽然我们配置固定数量的节点和用户,但是如果系统发生变化,需要引入新的组织,或者组织中需要增加新的帐号和用户,这个该如何处理呢?
cryptogen模块对于这个问题的解决有一项配置,我们可以重新配置一个yaml文件,在里面指定起始位置start
,例如
PeerOrgs:
- Name: Org1
Domain: org1.cmbc.com
Template:
Count: 3
Start: 2
之前,我们为Org1制定了2个peer节点,现在的count为3,start为3,说明从2开始,新增3个
# 原来的
peer0.org1.cmbc.com
peer1.org1.cmbc.com
# 新增的3个peer
peer2.org1.cmbc.com
peer3.org1.cmbc.com
peer4.org1.cmbc.com
Fabric-ca
Fabric-ca项目是为了专门解决Fabric帐号问题而开发的一个开源项目,由Fabric-ca-server和Fabric-ca-client两个模块组成。
客户端通过sdk访问peer节点之前,首先要通过CA Intermediate Server的验证。
编译和安装
准备
首先需要安装系统相关依赖,我们使用sqlite3作为ca-server的数据库存储
sudo apt-get install libtool libltdl-dev
sudo apt-get install sqlite3
下载并编译
由于我们使用的是v1.1.0版本,为了保持一致性,ca上依然使用这个版本
cd $GOPATH/src/github.com/hyperledger
git clone http://gerrit.hyperledger.org//r/fabric-ca
cd $GOPATH/src/github.com/hyperledger/fabric-ca
git checkout v1.1.0
make fabric-ca-server
make fabric-ca-client
# 为了便于使用,拷贝到usr目录下
sudo 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的init子命令用于初始化生成相关的配置文件
# 创建工作目录
mkdir ~/fabricwksp/04-ca/server
cd ~/fabricwksp/04-ca/server
# 生成配置文件,-b指定了ca-server的用户名和密码
fabric-ca-server init -b admin:adminpw
修改配置
主要的配置文件是目录系的fabric-ca-server-config.yaml
文件,里面包含了ca-server的端口,调试模式,tls,ca,db等信息。我们所需要做的是将ca-server绑定到现有的组织中,在前面例子的基础上,我们绑定到Org1上,需要修改ca
部分,将Org1的证书设置进去
ca:
name: ca-org1
keyfile: /home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/ca/9284b1b376bd6291d1c7e9b23902d6b6f660663241e2139e7093608f04198820_sk
certfile: /home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/ca/ca.org1.cmbc.com-cert.pem
chainfile: ca-chain.pem
启动ca-server
使用fabric-ca-server的start子命令启动服务器,需要制定配置文件所在的目录
fabric-ca-server start -H /home/ssj234/fabricwksp/04-ca/server --boot admin:adminpw
client的使用
通过Client,可以生成帐号,由于ca-server绑定的是Org1的证书,那么动态生成的帐号也就是Org1下的用户了。
设置目录
生产的帐号需要保存相关证书,因此,先生成一个文件夹保存这些证书
mkdir ~/fabricwksp/04-ca/client
使用enroll登记帐号
enroll会利用管理员帐号和密码注册,并获得管理员的MSP证书
export FABRIC_CA_CLIENT_HOME=/home/ssj234/fabricwksp/04-ca/client
fabric-ca-client enroll -M /home/ssj234/fabricwksp/04-ca/client -u http://admin:adminpw@localhost:7054
执行完命令后,我们会在client文件夹看到生成的相关文件
注册帐号
注册一个新的帐号peer4,密码为peer4pw,部门为org1.department1
fabric-ca-client register --id.name peer4 --id.type peer --id.affiliation org1.department1 --id.secret peer4pw -u http://localhost:7054
获取peer4的证书
首先,创建一个目录,用来保存peer4的msp
mkdir -p ~/fabricwksp/04-ca/peer4/msp/admincerts
执行enroll获取证书
fabric-ca-client enroll -M /home/ssj234/fabricwksp/04-ca/peer4/msp -u http://peer4:peer4pw@localhost:7054
复制管理员前面到peer4目录
cp /home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/users/[email protected]/msp/signcerts/* ~/fabricwksp/04-ca/peer4/msp/admincerts
将共用TLS签名证书拷贝到peer4目录下
mkdir -p ~/fabricwksp/04-ca/peer4/tls
cp /home/ssj234/fabricwksp/02-helloworld/fabricconfig/crypto-config/peerOrganizations/org1.cmbc.com/peers/peer0.org1.cmbc.com/tls/* ~/fabricwksp/04-ca/peer4/tls
在peer4的目录下,可以看到如下结构,这跟我们通过cryptogen生成的账号文件是一致的
├── msp
│ ├── admincerts
│ │ └── [email protected]
│ ├── cacerts
│ │ └── localhost-7054.pem
│ ├── intermediatecerts
│ │ └── localhost-7054.pem
│ ├── keystore
│ │ └── 75800c7f0f57af0eea8edfa8dc53fff45a3f98bb13281c645f18145b0c39d460_sk
│ └── signcerts
│ └── cert.pem
└── tls
├── ca.crt
├── server.crt
└── server.key