Fabric CA 应用与配置
简介
Fabric CA项目是超级账本Fabric内的MemberService组件, 对网络内各个实体的身份证书的管理, 主要实现:
- 负责Fabric网络内所有实体(Identity)的身份管理, 包括身份的注册、注销等
- 负责证书管理, 包括ECerts(身份证书)、TCerts(交易证书)等的发放和注销
- 服务端支持基于客户端命令行的RESTful API的交互方式
Fabric CA采用Go语言进行编写
基本组件
Fabric CA采用了典型的C/S架构, 目前包含两个基本组件, 分别实现服务端功能和客户端功能
- 服务端: fabric-ca-server实现核心的PKI(Public Key Infrastructure: 公钥基础设施)服务功能, 支持多种数据库后台(包括SQlite3、MySQL、PostgreSQL等), 并支持集成LDAP用为用户注册管理功能
- 客户端: fabric-ca-client封装了服务端的RESTful API, 提供访问服务端的命令, 供用户与服务端进行交互
安装服务端与客户端
安装Go1.9+
设置GOPATH环境变量
安装libtool 与 libltdl-dev 依赖包
$ sudo apt update
$ sudo apt install libtool libltdl-dev
安装
安装服务端与客户端二进制命令到$GOPATH/bin目录下
$ go get -u github.com/hyperledger/fabric-ca/cmd/...
切换至源码目录下:
$ cd $GOPATH/src/github.com/hyperledger/fabric-ca/
使用make命令编译:
$ make fabric-ca-server
$ make fabric-ca-client
生成 bin
目录, 目录中包含 fabric-ca-client
与 fabric-ca-server
两个可执行文件
设置环境变量
$ export PATH=$GOPATH/src/github.com/hyperledger/fabric-ca/bin:$PATH
初始化
返回至用户目录
$ cd ~
$ mkdir fabric-ca
$ cd fabric-ca
fabric-ca启动:
1. 使用init进行初始化
2. 使用start启动
初始化
$ fabric-ca-server init -b admin:pass
生成配置文件到至当前目录
- fabric-ca-server-config.yaml: 默认配置文件
- ca-cert.pem: PEM格式的CA证书文件, 自签名
- fabric-ca-server.db: 存放数据的sqlite数据库
- msp/keystore/: 路径下存放个人身份的私钥文件(_sk文件), 对应签名证书
快速启动
快速启动并初始化一个fabric-ca-server服务
$ fabric-ca-server start -b admin:pass
-b: 提供注册用户的名称与密码, 如果没有使用LDAP, 这个选项为必需. 默认的配置文件的名称为fabric-ca-server-config.yaml
如果之前没有执行初始化命令, 则启动过程中会自动先进行初始化操作. 即从主配置目录搜索相关证书和配置文件, 如果不存在则会自动生成
RESTful API
在打开的新终端中输入以下命令获取指定CA服务的基本信息.
$ curl -X POST -d '{"caname":"test_ca"}' http://localhost:7054/api/v1/cainfo
如要获取默认CA服务的基本信息, 可以不带任何参数, 如:
$ curl -X POST http://localhost:7054/api/v1/cainfo
服务端命令剖析
fabric-ca-server命令主要负责启动一个CA服务, 包括init和start两个子命令
服务端配置文件解析
fabric-ca-server-config.yaml配置文件包括通用配置, TLS配置, CA配置, 注册管理配置, 数据库配置, LDAP配置, 组织结构配置, 签名, 证书申请等几部分
version: 1.1.1-snapshot-e656889
port: 7054 # 指定服务的监听端口
debug: false # 是否启用DEBUG模式, 输出更多的调试信息上
crlsizelimit: 512000
# 是否在服务端启用TLS,如果启用TLS后进行身份验证的证书和签名的私钥
tls:
enabled: false # 是否启用TLS, 默认不启用
certfile: # TLS证书文件
keyfile: # TLS密钥文件
clientauth: # 客户端验证配置
type: noclientcert # 默认不进行身份验证
certfiles: # 进行客户端身份验证时, 信任的证书文件列表
# 包括实例的名称、签名私钥文件、身份验证证书和证书链文件乖;这些私钥和证书文件会用来作为生成ECert、TCert的根证书
ca:
name: # CA服务名称. 可以支持多个服务
keyfile: # 密钥文件(默认