特别说明一下,本系列博文(多篇)是以Hyperledger Fabric官方文档为基础,模拟搭建一个由4个组织(R1,R2,R3,R4)组件的联盟链系统。
全文会以这篇文章的描述顺序一步一步来,因为我觉得这样会给大家一个更直观的感受。Hyperledger Fabric示例网络原文
当前页文章主要学习CA的服务部署,原文地址:https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html
证书颁发机构(Certificate Authorities,CA)
Hyperledger Fabric 支持交易网络,所有参与者都拥有已知身份。公钥基础结构用于生成与组织、网络组件以及终端用户或客户端应用程序相关联的加密证书。因此,可以在更广泛的网络和通道级别上操纵和管理数据访问控制。Hyperledger Fabric 的这种“许可”概念,加上通道的存在和功能,有助于解决隐私和机密性较高的问题。
请参阅 成员服务提供者 (MSP) 主题,以更好地了解加密实现,以及 Hyperledger Fabric 中使用的签名、验证、身份认证方法。
CA就是为成员颁发身份证明的重要组件。
在搭建Hyperledger Fabric网络之前,它会被用来给管理者和网络节点颁发证书。因为它会分配 X.509 证书,这个证书能够用来识别属于组织 R4 的组件。
简介:
Fabric CA是Fabric 提供了一个内置的 CA 组件,允许在你的区块链网络中创建 CA。 在实际生产环境下,我们可以按实际情况使用自己的CA服务,并非一定要用Fabric CA。
Fabric CA由服务端和客户端组件组成,CA服务端(fabric-ca-server
)可以看作一个web服务,执行了Go代码编译生成的二进制文件后,会监听一个端口,处理收到的请求。
CA客户端(fabric-ca-client
)其实就是一个向CA服务端发送请求的程序,执行编译成的二进制文件并带上不同参数,可以向CA服务器发送相应的http请求,完成一系列操作。
源码地址:https://github.com/hyperledger/fabric-ca/
1.环境要求:
- Go 1.13+ installation
GOPATH
environment variable is set correctly- libtool and libtdhl-dev packages are installed
在Ubuntu上安装libtool依赖项
sudo apt install libtool libltdl-dev
在MacOSX上安装了libtool依赖项:
brew install libtool
2.安装
官方建议使用go get 快速获取程序可执行文件
go get -u github.com/hyperledger/fabric-ca/cmd/...
以上代码将fabric-ca-server和fabric-ca-client二进制文件安装到系统中,并位于 $GOPATH/bin/目录下。
并且会clone源码到$GOPATH/src/github.com/hyperledger/fabric-ca/目录下。
查看是否安装成功
fabric-ca-client version
fabric-ca-server version
3.启动CA服务
官方有两种,
- 直接启动本地服务
- 在docker内启动服务
因为docker的便利和易于管理性,我这里选择通过docker启动
Ubuntu 18.04 安装Docker 和 Docker-Compose方法
1.到 Docker Hub 页面查找镜像版本
其实这里可以通过digest看出 latest,1.4,1.49都是同一版本,为了方便演示我现在这个1.4.9的tag演示
2.创建docker-compose.yml文件
sudo vi docker-compose.yml
#文件名必须是 docker-compose.yml
########################文本内容###########################
fabric-ca-server:
image: hyperledger/fabric-ca:amd64-1.4.9 #注意这里要更改为你要使用的镜像tag
container_name: fabric-ca-server
ports:
- "7054:7054"
environment:
- FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
volumes:
- "./fabric-ca-server:/etc/hyperledger/fabric-ca-server"
command: sh -c 'fabric-ca-server start -b admin:adminpw'
#-b admin:adminpw
#admin 是我们指定的用户,我们现在给admin生成证书
#adminpw 是admin的密码
3.启动服务
在与docker-compose.yml文件相同的目录中打开一个终端,然后执行以下命令。
如果指定的fabric-ca映不存在本地,会自动在Compose文件中将其下拉,并启动fabric-ca服务器的实例。
sudo docker-compose up -d
因为我的docker-compose.yml文件在/mnt目录下。所以如图所示:
通过docker ps 查看运行情况
4.修改fabric-ca-server-config.yaml默认的组织信息
接下来我们要修改默认的fabric-ca-server-config.yaml文件内的affiliations信息,像这样
关闭之前的fabric-ca-server容器
然后删除原来的/mnt/fabric-ca-server/fabric-ca-server.db 文件
sudo rm -rf /mnt/fabric-ca-server/fabric-ca-server.db
然后重新启动
4.Fabric CA Server
了解docker的用户应该知道,在上面的docker-compose.yml文件中,我们写了一行命令,这行命令会在我们启动docker容器时运行
这段命令会在启动fabric-ca-server服务时为我们的admin生成一个的证书 ca-cert.pem,因为docker-compose.yml里定义了绑定了当前目录,我们可以看到当前目录下有一个fabric-ca-server文件夹,并且可以通过tree命令查看完整目录
msp
:包含keystore,CA服务器的私钥ca-cert.pem
:CA服务器生成的admin证书fabric-ca-server.db
:CA默认使用的嵌入型数据库 SQLite,存储发放证书信息,可以通过sqllite3或其他可视化工具查看详细信息。fabric-ca-server-config.yaml
:CA服务端的配置文件
这是刚刚执行生成的证书文件,我们可以通过openssl命令查看证书内容
openssl x509 –in ca-cert.pem –inform pem –noout -text
看不懂不要紧,反正这也不是重点
5.生成R4的证书(适用于给任何组织或个人生成证书)
回顾一下我们刚刚所做的事情
- 在docker中启动了一个 fabric-ca-server的服务
- 在部署服务端时,生成了一个admin证书
还记得我们在2.安装中的CA的客户端 fabric-ca-client 吗?
接下来我们将使用客户端来生成组织R4的管理员证书
1.设置client环境变量
#在当前目录生成ca_client文件夹
sudo mkdir ca_client
#设置FABRIC_CA_CLIENT_HOME变量
export FABRIC_CA_CLIENT_HOME=/mnt/ca_client
像这样
2.通过fabric-ca-client程序链接CA服务器并enroll(登录)admin管理员
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
#admin是用户名
#adminpw是admin的密码
#localhost:7054 fabric-ca-server端口,这是刚刚在docker-compose.yml指定的
这个时候我们可以看到我们的/mnt/ca_client目录下会生成证书文件,像这样
可以发现/mnt/ca_client目录下生成了一个fabric-ca-client-config.yaml
配置文件,以及msp
目录,包含管理员的证书和私钥。有了已经成功enroll(登录)的admin用户,接下来将admin作为管理员来register(登记)一个新用户:R4-admin
3.通过fabric-ca-clientregister(登记)R4管理员的证书
fabric-ca-client register --id.name r4-admin --id.secret r4-adminpw --id.type admin --id.affiliation r4.admin
register成功后会有这样的显示
4.登录并获取r4-admin的证书到本地
fabric-ca-client enroll -u http://r4-admin:r4-adminpw@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/r4-admin
#r4-admin:r4-adminpw 对应的用户名和密码
#-M 指定的是r4-admin证书保存的位置
提示成功
现在我们再看本地文件目录
可以看成我们已经成功获取到了r4-admin的证书了
6.查看已颁发的所有证书信息
1.安装sqllite3工具
sudo apt-get install sqlite3 libsqlite3-dev
2.查看证书数据
sqlite3 fabric-ca-server/fabric-ca-server.db
sqlite> .tables
sqlite> select * from certificates;
到这里,我们通过在Docker部署fabric-ca服务,并通过创建登录了CA的admin账户以及R4-admin的账户了。
有问题或建议的小伙伴欢迎留言骚扰!