fabric CA

Fabric CA为Hyperledger Fabric行使证书机构的功能。

Fabric CA提供以下功能:

  1. 身份注册,或者将连接到LDAP作为用户注册;
  2. 颁发登录证书(ECerts);
  3. 颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性;
  4. 证书续期与撤销

Fabric CA 包含一个服务端组件和一个客户端组件

下图说明了 Fabric CA 服务端如何在 Hyperledger Fabric 架构中发挥作用

fabric ca源码  https://github.com/hyperledger/fabric-ca

使用文档  https://hyperledger-fabric-ca.readthedocs.io/en/latest/

需要安装两个包

centos     yum install libtool libtool-ltdl-devel

ubuntu    apt install libtool libltdl-dev

Fabric CA 提供3种方式来配置 fabric-ca-server 和 fabric-ca-client 。优先级如下:

  1. 命令行参数
  2. 环境变量
  3. 配置文件

配置优先级由高到低依次为命令行参数 > 环境变量 > 配置文件

配置文件的修改可以被环境变量或者命令行参数覆盖

fabric-ca-server 和 fabirc-ca-client 的配置文件里的所有属性都支持相对路径和绝对路径。相对路径是相对于配置目录,即配置文件所在的目录

实验步骤:

export FABRIC_CA_SERVER_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-server

export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-client

初始化fabric-ca服务端

fabric-ca-server init -b admin:adminpw

-b 选项指定了引导身份的用户名和密码

[root@localhost hyperledger]# ls fabric-ca-server/
ca-cert.pem  fabric-ca-server-config.yaml  fabric-ca-server.db  msp

ca-cert.pem是CA中心的根证书,用自己的私钥自签名,证书包含自己的公钥,用于验证其它签名证书的有效性

fabric-ca-server-config.yaml为CA服务端配置文件

fabric-ca-server.db是存储注册用户和证书的数据库

msp/keystore里存放的是CA中心的私钥,用于生成根证书和其它证书

启动fabric服务端

fabric-ca-server start -b admin:adminpw

登陆刚才引导注册的身份,取得登陆用户CA证书

fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

[root@localhost hyperledger]# ls fabric-ca-client/
fabric-ca-client-config.yaml  msp
fabric-ca-client-config.yaml是CA客户端的配置文件

msp/cacerts存放的是根证书(与CA服务端根证书相同)

msp/keystore存放的是登陆用户的私钥

msp/signcerts存放的是登陆用户的身份证书,证书由CA服务端私钥签名,证书包含了登陆用户的身份信息和公钥

注册一个新的身份证

只有已经登录了的身份才能发起注册的请求,而且必须有相应的权限来注册想要注册的身份类型

fabric-ca-client register --id.name zhaolong--id.type user --id.affiliation org1.department1 --id.attrs hf.Revoker=true

会显示密码:

Password: qNRdsGhrPnYE

密码会被打印出来,登录这个新注册的身份的时候,需要用到这个密码。这允许一个管理员注册身份,然后把这个身份的ID和密码给别人来登陆。

注册一个节点身份,在这里我们选择指明自己的密码,而不是由服务器生成

fabric-ca-client register --id.name peer1 --id.type peer --id.affiliation org1.department1 --id.secret peer1pw

登陆一个节点

export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-user/peer1

fabric-ca-client enroll -u http://peer1:peer1pw@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp

-M选项允许你指定登陆节点CA证书存储在哪

从另一个Fabric CA服务器获得CA证书链

下面的命令会在本地启动第二个Fabric CA服务器,监听7055端口,命名为“CA2“。这代表两个由不同成员管理的分开的信任中心。

export FABRIC_CA_SERVER_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-server2

fabric-ca-server start -b admin:ca2pw -p 7055 -n CA2

下面的命令会把CA2的证书链安装进peer1的MSP2目录,也就是取得CA2的根证书

export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-user/peer1

fabric-ca-client getcacert -u http://localhost:7055 -M $FABRIC_CA_CLIENT_HOME/msp2

重新登陆一个身份

假设你的登陆证书快过期了,你可以重新登陆来替换你的登陆证书(ECert)

export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-user/peer1

fabric-ca-client reenroll

登陆超时时间由expiry字段指定

撤销一个证书或身份

身份和证书都能被撤销。撤销一个身份会撤销该身份拥有的所有证书,该身份也不能再获得新的证书。撤销一个证书会使该证书失效。

为了撤销一个证书或身份,发起者必须有hf.Revoker属性。发起者只能撤销与自己的affiliation相同的证书或身份,或者发起者的affiliation是被撤销者的affiliation的前缀

撤销peer1的身份

export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-client

fabric-ca-client revoke -e peer1

一个身份可以撤销自己的登陆证书(ECert),需要指定ECert的AKI和序列号:

fabric-ca-client revoke -a xxx -s yyy -r <reason>

可以通过openssl命令来获取一个证书的AKI和序列号:

serial=$(openssl x509 -in userecert.pem -serial -noout | cut -d "=" -f 2)

aki=$(openssl x509 -in userecert.pem -text | awk '/keyid/ {gsub(/ *keyid:|:/,"",$1);print tolower($0)}')

fabric-ca-client revoke -s $serial -a $aki -r affiliationchange














猜你喜欢

转载自blog.csdn.net/btqszl/article/details/79081958
今日推荐