Fabric-ca整体通信架构

上图是Fabric-ca部分通信的流程,整体的流程是:
- Server端初始化(CA根证书生成)
- Server端启动服务
- Client端向Server端请求登记
- Server端向Client端返回登记证书ECert
- Client端向Server端请求注册节点
- Server端向Client端返回节点注册信息结果
- Client端向Server端请求登记节点
- Server端生成TCert,存入数据库
- Server端向Client端返回登记结果
Fabric-ca通信流程分析

上图是server端的启动,admin:adminpw,直译为用户:传递引导管理员。
- 首先是配置文件的存放路径/home/zbw/go/bin/fabric-ca-server-config.yaml
- 进行server端操作的路径:/home/zbw/go/bin,所生成密钥的类型与长度:sm2,256
encoded CSR表示当前的server端从证书结构结构和现有密钥创建新的CSR。
注:CSR是Certificate Signing Request的英文缩写,即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。
- 然后使用序列号对证书进行签名
- fabric-ca生成对应的CA和密钥,密钥由BCCSP提供者’SW’保存。
- 证书的路径:/home/zbw/go/bin/ca-cert.pem
- 一些初始化的信息,存放在/home/zbw/go/bin/fabric-ca-server.db
- 默认CA的主目录:/home/zbw/go/bin
根据上图命令:
fabric-ca-server start –b admin:adminpw
Fabric-ca的server端已成功启动,在服务器根目录下生成对应文件:

其中fabric-ca-server和fabric-ca-client为fabric-ca编译后可执行的文件。fabric-ca-config.yaml是启动过程中所使用的配置文件。keystore中的文件是生成的私钥。

可以看到数据库中有3个表,其中users表中目前只有启动时设定的引导节点,
现在使用fabric-ca先登记引导节点,命令如下:
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
这里admin和adminpw即为fabric-ca-server启动时设置的引导节点登记id和密码
client执行结果如下:

server端接收到登记请求:

在ca-client目录下生成的目录结构如下:

其中msp/signcerts目录下存储的为client的私钥,cacerts目录下存储的为证书信息。
回到ca-server目录下,打开sqlite3数据库,可以看到刚刚颁发的数字证书已经记录在数据库里了:

Fabric-ca通信中核心函数的函数调用
CA的整体结构,首先是生成默认的配置文件yaml,然后根据配置文件生成根证书CA。
NewCA使用指定的主目录,父服务器URL和配置创建一个新的CA.

调用initCA :将传入的指针初始化为一个CA结构体

进行init初始化 CA的一个实例

此处会调用initKeyMaterial,进行CA密钥的初始化 该函数体内会调用函数:

getCACert()获取此CA的CA证书:这是一个根CA,因此创建一个CSR(证书签名请求),同时根据配置生成密钥/签名者,调用CFSSL来初始化CA。

这时,会生成对应的CA以及对应的公私钥对。
Fabric-ca整体调用结构
Csp:cryptographic service provider(密码服务提供商),主要的作用是密码标准和算法的实现。Lib:lib模块定义了fabric-ca配置结构。CFSSL:捆绑TLS / SSL证书链以及内部证书颁发机构基础结构。Crypto:收集常用的密码常量。Bccsp:(blockchain crypto service provider )密码算法模块(密钥)。Util: 定义了sm2签名结构,主要作用是从pem文件中读取证书和对Json文件进行识别。
其调用结构如下:
