fabric基础-Fabric CA介绍及使用

Fabric网络中,身份信息文件、TLS通信文件,都需要有专门的模块来管理。通常测试时,为了方便,我们可以使用Fabric官方提供的crypto工具来快速生成需要到证书等。但真正的生产环境中,必须要有一个中心证书机构同一管理和维护证书,合理的规划CA层级,使得新组织加入时不会影响正在使用的证书,并且具有良好的扩展性。官方提供的Fabric CA本身就是为了解决这个问题而生的,是一个完全独立的模块。随着Fabric网络规模的扩大,CA中心由简单的一两个节点,可能会逐步扩充为一个集群等。作为Fabric的入口,很有必要掌握Fabric CA的一些原理和应用。

1、Fabric CA整体架构

  1. Fabric CA根证书服务:建议在正是环境中只存在一个根证书,当然根据具体情况也可以有多个。该证书不用于具体CA证书颁发,具体的颁发行为交由中间CA来处理。该服务重要是用于统一管理中间证书。
  2. Fabric CA中间证书服务:每个中间证书都隶属于根证书,或隶属于其它中间证书,在正式环境中,建议每个组织对应一个中间证书,由该中间证书负责处理该组织的全部节点和成员的证书颁发。
  3. Fabric CA服务器集群:可以把中间证书服务通过HA Proxy实现Fabric CA服务器集群。将流量负载平衡到一个Fabric CA集群成员。各汲取成员生成的证书保存到同一个数据库中,方便查询身份和证书。
  4. Fabric CA客户端:负责登记、注册、销毁证书。
  5. 两种方式和CA服务器交互:直接使用CA客户端、通过SDK调用

1.1 主要功能

  1. 各实体的身份注册和登记
  2. 给各实体发放登记证书(ECerts)
  3. 给各实体发放交易证书(TCerts)
  4. 各颁发证书的更新和销毁

2、下载与安装

  1. 可直接下载官方相应系统最新编译好的二进制文件,下载入口:fabric-ca可执行程序 或者使用源码编译生成可执行程序,源码仓库:fabric-ca源码
    二进制程序。
  2. 这里建议直接使用官方已编译好的,本文使用的是v1.5.0版本
  3. 二进制可执行程序分为两个:
    服务器端:fabric-ca-server,顾名思义,用于提供CA服务,需要放到指定服务器
    客户端:fabric-ca-client,用于连接CA服务,可以客户端操作和测试CA服务,放在你想放的地方即可。
  4. 为方便操作,建议设置环境变量,这个过程不阐述。

3、fabric-ca-server使用

3.1 初始化

这个过程只是生成启动前的初始化文件,其实下一个步骤启动已经包含了这个过程,根据实际需要可选择是否要跳过该步骤;
设置工作主目录,这里有这样一个规则,优先级由上至下:

  1. 命令行设置-home
  2. 配置环境变量:FABRIC_CA_SERVER_HOME
  3. 配置环境变量:FABRIC_CA_HOME
  4. 配置环境变量:FABRIC_CFG_PATH
  5. 使用当前二进制所在目录

初始化命令:

1
./fabric-ca-server init -b admin:adminpw --home ./fabric_ca_server

-b:设置默认管理员的账户和密码
--home:设置默认工作目录
命令执行后,会有一系列的日志,记录了整个执行过程,这个日志在这里就不贴上来了。
执行后,会在工作目录下生成如下文件:

1
2
3
4
5
6
7
8
9
10
11
.
├── IssuerPublicKey # 身份混合器会用到(零知识证明)
├── IssuerRevocationPublicKey # 身份混合器会用到(零知识证明)
├── ca-cert.pem # 自签名CA根证书,用于验证其它证书的有效性
├── fabric-ca-server-config.yaml # CA服务端配置文件,服务启动时会读取这里的配置信息,因此建议启动前先配置好该文件
├── fabric-ca-server.db # 用于存储注册用户和证书的数据库,这里默认用的是sqlite
└── msp # 存放CA中心生成的个人身份的私钥文件,用于生成根证书和其他证书,生成的文件格式为_sk
└── keystore
├── 41a1416624e186b4f5f19ae643c8e2b2493f5175226b49668fb34dfa7cc2bd9e_sk
├── IssuerRevocationPrivateKey
└── IssuerSecretKey

其中,fabric-ca-server-config.yaml涉及到一系列CA服务器的配置属性,需要根据了解逐步去配置,里面官方给每个属性都配有说明。这块如果展开说,篇幅不够的,后续根据需要看是否需要开专门一篇文章来讲解这个配置文件的内容;建议启动前先配置好该文件。

3.2 启动

启动时,会生成一系列检测信息,启动过程本身就包含了初始化过程,如果先前没有初始化,或者没有指定配置文件,则该过程会自动生成新的初始化文件
启动后,默认端口号是:7054,用来监听客户端的请求。要改别的端口号,则前往配置设置。
启动命令:

1
./fabric-ca-server start -b admin:adminpw --home ./fabric_ca_server --cfg.affiliations.allowremove --cfg.identities.allowremove

--cfg.affiliations.allowremove:指定允许删除联盟
--cfg.identities.allowremove:指定允许删除用户

3.3 sqlite db

默认使用的是sqlite数据库,ca server初始化完成后,会生成fabric-ca-server.db,使用navicat打开后,会发现里面总共7张表,分别为:

  1. affiliations:存储机构组织
  2. certificates:客户端登录账号会在此处有一个记录
  3. credentials
  4. nonces
  5. properties
  6. revocation_authority_info
  7. users:用户账户

4、fabric-ca-client使用

  1. 这个是ca客户端,主要用来和ca服务器端的交互,主要涉及到以下几个命令:
    register:注册用户身份
    enroll:登记用户身份
    reenroll:重新登记用户身份
    revoke:注销已签发的用户证书
    affiliation list:列举组织关系
    affiliation remove:移除组织关系
    affiliation add:添加组织关系

  2. 注:务必先启动ca服务器端

  3. 默认启动的ca server,数据库里组织是没什么用的,需要删除掉,然后重新添加一个需要的组织,然后为该组织注册一个账号。这整个操作流程,正好满足ca客户端的基本使用,为此按照这个思路,讲解以下流程

  4. 以下操作建议为ca客户端配置一个根目录FABRIC_CA_CLIENT_HOME,取代--home参数

4.1 登记账号

CA客户端要操作任何内容,都需要先登记相应的账号,这里我们登记管理员账号admin。
登记的目的是获取签名证书,这样之后只要用相应账号密码连接ca服务即可操作相应功能

1
./fabric-ca-client enroll -d --enrollment.profile tls -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client  -M ./crypto_config/ordererOrganizations/msp 

4.2 查看现有组织

可以直观返回当前ca数据库组织关系

1
./fabric-ca-client  affiliation list -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client  -M ./crypto_config/ordererOrganizations/msp

返回默认组织关系

1
2
3
4
5
6
affiliation: .
affiliation: org2
affiliation: org2.department1
affiliation: org1
affiliation: org1.department1
affiliation: org1.department2

4.3 删除组织

需要admin账户拥有删除组织的权限。默认自带的组织并没有什么用,可以逐个删除,比如删除org1组织

1
2
3
4
5
# 删除组织1
./fabric-ca-client affiliation remove --force org1 -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

# 删除组织2
./fabric-ca-client affiliation remove --force org2 -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

--force:可以强制删除组织和其子组织

4.4 添加组织

组织添加有规则限制,比如组织格式为:com.jason.org1,需要先添加组织com,然后添加com.jason,最后添加com.jason.org1

1
2
3
4
5
6
7
8
9
10
11
# 添加组织com
fabric-ca-client affiliation add com -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

# 添加组织com.jason
fabric-ca-client affiliation add com.jason -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

# 添加组织com.jason.org1
fabric-ca-client affiliation add com.jason.org1 -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

# 添加组织com.jason.org2
fabric-ca-client affiliation add com.jason.org2 -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

通过查看可知,当前ca数据库中,组织关系为:

1
2
3
4
affiliation: com
affiliation: com.jason
affiliation: com.jason.org1
affiliation: com.jason.org2

4.5 获取ca证书信息

1
fabric-ca-client getcainfo -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client  -M ./crypto_config/organizations/msp

4.6 注册用户身份

需要记住的是,注册完成之后,要及时登记(enroll),否则该账号依旧无法做任何操作

1
2
3
4
5
6
# 注册
./fabric-ca-client register -u http://admin:adminpw@localhost:7054 --id.name orderer.jason.com --id.type orderer --id.affiliation "com.jason" --id.attrs '"hf.Registrar.Roles=client,orderer,peer,user","hf.Registrar.DelegateRoles=client,orderer,peer,user",hf.Registrar.Attributes=*,hf.GenCRL=true,hf.Revoker=true,hf.AffiliationMgr=true,hf.IntermediateCA=true,role=admin:ecert' --id.secret=123456 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/msp

# 登记
./fabric-ca-client enroll -u http://orderer.jason.com:123456@localhost:7054 --home ./fabric_ca_client -M ./crypto_config/ordererOrganizations/users/orderer.jason.com/msp

4.7 重新登记用户身份

比如证书快到期了,或者想要更换证书,则重新登记

1
./fabric-ca-client reenroll -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client  -M ./crypto_config/ordererOrganizations/msp 

4.8 注销已签发的证书

1
./fabric-ca-client revoke -e "orderer.jason.com" -r "注销原因:xxxx" -u http://admin:adminpw@localhost:7054 --home ./fabric_ca_client  -M ./crypto_config/ordererOrganizations/msp 

-e:用户账号
-r:注销原因

总结

本文主要介绍了CA服务端和客户端的操作以及执行原理

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2017-2023 Jason
  • Visitors: | Views:

谢谢打赏~

微信