掘金 后端 ( ) • 2021-11-29 18:51

Fabric CA是Fabric中的证书颁发机构

他提供的功能有:

  • 身份登记,或者连接到LDAP作为用户登记
  • 颁发注册证书
  • 证书的续订和撤销

Hyperlowger Fabric CA由服务器和客户组件组成,如本文档稍后所述。

1.概览

下图说明了Fabric CA server如何在Fabric架构中发挥作用

image.png

Fabric Server有两种交互方式,一种是通过Fabric CA client就是客户端,一种是Fabric SDK.这两种方式都是通过REST APIs.可以通过fabric-ca/swagger/swagger-fabric-ca.json来查看接口的swagger文档。

在一个集群中所有的Fabric CA server共享相同的数据库为了跟踪身份和证书,如果开启了LDAP,身份信息将保持到LDAP上而不是数据库中。

一个服务器可能包括多个CA颁发机构,每个CA要么是根CA要么是中间CA.每个中间CA都有一个父CA,这个父CA要么是一个根CA要么也是一个中间CA

本地启动一个fabric ca server

fabric-ca-server start -b admin:adminpw

Fabric CA 提供了三种方式配置设置Fabric CA客户端服务器。优先顺序是:

  • 1.命令行选项
  • 2.环境变量
  • 3.配置文件

在本文档的其余部分中,我们指的是更改配置文件。但是,可以通过环境变量或CLI标志覆盖配置文件更改。

Fabric CA Server

您可以在开始之前初始化Fabric CA服务器。这为您提供了一个机会,为您生成默认配置文件,可以在启动服务器之前进行审核和自定义。

Fabric CA Server的主目录如下:

  • 如果设置了-home命令行选项,请使用其值
  • 否则,如果设置了fabric_ca_server_home环境变量,请使用其值
  • 否则,如果设置Fabric_CA_HOME环境变量,请使用其值
  • 否则,如果设置CA_CFG_PATH环境变量,请使用其值
  • 否则,使用当前工作目录

对于此服务器部分的其余部分,我们假设您已设置FABRIC_CA_HOME$HOME/fabric-ca/server.

下面的说明假定服务器配置文件存在于服务器的主目录中。

初始化服务器

fabric-ca-server init -b admin:adminpw

启动Fabric CA Server需要至少一个引导身份;此身份是服务器管理员。

服务器配置文件包含可以配置的证书签名请求(CSR)部分。以下是示例CSR。

cn: fabric-ca-server
names:
   - C: US
     ST: "North Carolina"
     L:
     O: Hyperledger
     OU: Fabric
hosts:
  - host1.example.com
  - localhost
ca:
   expiry: 131400h
   pathlength: 1

上面的所有字段都属于X.509签名密钥和证书,由命令fabric-ca-server init产生。这对应于服务器配置文件中的ca.certfileca.keyfile文件。这些字段如下:

  • CN是常见名称
  • O是组织名称
  • OU 是组织单位
  • L 是位置或城市
  • ST 是国家
  • C是国家

如果需要CSR的自定义值,则可以自定义配置文件,删除ca.certfileca.keyfile配置项指定的文件,然后再次运行fabric-ca-server init -b admin:adminpw命令。

fabric-ca-server init命令将产生一套自签名的CA证书除非你指定-u 选项。如果你指定了-u选项,那么CA证书将被父CA Server签名。为了对父Fabric CA服务器进行身份验证,URL形式必须是://:@:,其中 对应于身份hf.IntermediateCA属性值设置为true.fabric-ca-server init命令将同时产生一个默认的配置文件名为fabric-ca-server-config.yaml在服务器的主目录下。

如果您希望Fabric CA Server使用您提供的CA签名证书和key文件,则必须将文件放在CA.Certfile和CA.KEYFILE所引用的位置。这两个文件都必须是PEM编码,不得加密。更具体地说,CA证书文件的内容必须以-----BEGIN CERTIFICATE-----和key文件的内容必须以-----BEGIN PRIVATE KEY----- - 而不是-----BEGIN ENCRYPTED PRIVATE KEY-----

可以自定义CSR以生成支持椭圆曲线(ECDSA)的X.509证书和密钥。以下设置是具有曲线prime256v1和签名算法ecdsa-with-SHA256的椭圆曲线数字签名算法(ECDSA)实现的示例

key:
   algo: ecdsa
   size: 256

算法和密钥大小的选择基于安全需求。

启动服务器

fabric-ca-server start -b :

如果先前未初始化服务器,则它将在第一次启动时初始化。在此初始化期间,如果它们尚不存在,则服务器将生成CA-Cert.pem和CA-key.pem文件,如果它不存在,还将创建默认配置文件。

为了让CA 服务器监听https而不是http,把tls.enabled设置为true.

限制相同秘密(或密码)的次数可用于注册,将registry.maxenrollments消息设置为适当的值。如果将值设置为1,则Fabric CA Server允许特定注册ID的密码只能使用一次。如果将值设置为-1,则Fabric CA Server不会限制秘密可以重用注册的次数。默认值为-1。将值设置为0,Fabric CA Server将禁用所有身份的注册,并不允许注册身份。

Fabric CA服务器现在应该在端口7054上收听。

默认情况下,Fabric-CA Server由单个默认CA组成。但是,可以使用cafilescacount配置选项添加附加的CA到单个服务器。每个附加的CA都有自己的主目录

fabric-ca-server start -b admin:adminpw --cacount 2

Fabric CA client

Fabric CA客户端的主目录如下:

  • 如果设置了-home命令行选项,请使用其值
  • 否则,如果设置fabric_ca_client_home环境变量,请使用其值
  • 否则,如果设置了Fabric_ca_home环境变量,请使用其值
  • 否则,如果设置CA_CFG_PATH环境变量,请使用其值
  • 否则,请使用$ home / .fabric-ca-client

下面的说明假定客户端配置文件存在于客户端的主目录中。

登记引导身份

这一步非常重要,不能跳过,否则你在注册其他信息的时候就会

➜  ./fabric-ca-client register --id.name peer2 --id.type peer --id.affiliation org2.department1 --id.secret peer2pw

2021/11/29 15:16:30 [INFO] Configuration file location: /Users/xxx/workspace/zjwfa/fabric-ca-client/clients/admin/fabric-ca-client-config.yaml

2021/11/29 15:16:30 [ERROR] Enrollment check failed: Idemix enrollment information does not exist

Error: Enrollment information does not exist. Please execute enroll command first. Example: fabric-ca-client enroll -u http://user:userpw@serverAddr:serverPort

首先,如果需要,请在客户端配置文件中自定义CSR(证书签名请求)部分。请注意,CSR.CN字段必须设置为引导标识的ID。默认CSR值如下所示:

csr:
  cn: <>
  key:
    algo: ecdsa
    size: 256
  names:
    - C: US
      ST: North Carolina
      L:
      O: Hyperledger Fabric
      OU: Fabric CA
  hosts:
   - <>
  ca:
    pathlen:
    pathlenzero:
    expiry:

之后,运行fabric-ca-client enroll命令登记身份。例如下面的命令注册其ID为Admin和Password是通过调用在7054端口本地运行的Fabric CA Server的AdminPW。

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

登记命令存储登记证书,相关的私钥,和CA证书链PEM文件在Fabric CA客户端子目录的msp目录下。你可以通过消息看到PEM文件存放的位置

注册一个新的身份

这里的实例是注册一个peer身份。

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

注意,这个的--id.affiliation指定的值必须是CA server中配置文件中存在的值,否则就会报错

fabric-ca-client register --id.name peer4 --id.type peer --id.affiliation org6.department1 --id.secret peer4pw

2021/11/29 15:31:42 [INFO] Configuration file location: /Users/zhaojunwei/workspace/zjwfa/fabric-ca-client/clients/admin/fabric-ca-client-config.yaml

Error: Response from server: Error Code: 71 - Authorization failure

这是因为我们的CA server配置文件中只有下面的组织和部门

affiliations:

   org1:

      - department1

      - department2

   org2:

      - department1

登记一个peer身份

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

重新登记

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
fabric-ca-client reenroll

撤销一个证书或者身份

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client revoke -e peer1