6.3 如何启动Fabric-CA

目标

  1. 认识 Fabric-CA 服务器端主目录路径
  2. 启动 Fabric-CA 的方式

任务实现

6.3.1 初始化

Fabric-CA 服务器的主目录确定如下:

  • 如果设置了 -home 命令行选项,则使用其值
  • 否则,如果 FABRIC_CA_SERVER_HOME 设置了环境变量,则使用其值
  • 否则,如果 FABRIC_CA_HOME 设置了环境变量,则使用其值
  • 否则,如果 CA_CFG_PATH 设置了环境变量,则使用其值
  • 否则,使用当前工作目录作为服务器端的主目录.

现在我们使用一个当前所在的目录作为服务器端的主目录。返回至用户的HOME目录下,创建一个 fabric-ca 目录并进入该目录

$ cd ~
$ mkdir fabric-ca
$ cd fabric-ca

创建该目录的目的是作为 Fabric-CA 服务器的主目录。默认服务器主目录为 “./” 。

初始化 Fabric-CA

$ fabric-ca-server init -b admin:pass

在初始化时 -b 选项是必需的,用于指定注册用户的用户名与密码。

命令执行后会自动生成配置文件到至当前目录:

  • fabric-ca-server-config.yaml: 默认配置文件
  • ca-cert.pem: PEM 格式的 CA 证书文件, 自签名
  • fabric-ca-server.db: 存放数据的 sqlite3 数据库
  • msp/keystore/: 路径下存放个人身份的私钥文件(_sk文件),对应签名证书

6.3.2 快速启动

快速启动并初始化一个 fabric-ca-server 服务

$ fabric-ca-server start -b admin:pass

-b: 提供注册用户的名称与密码, 如果没有使用 LDAP,这个选项为必需。默认的配置文件的名称为 fabric-ca-server-config.yaml

如果之前没有执行初始化命令, 则启动过程中会自动进行初始化操作. 即从主配置目录搜索相关证书和配置文件, 如果不存在则会自动生成

6.3.3 配置数据库

Fabric-CA 默认数据库为 SQLite,默认数据库文件 fabric-ca-server.db 位于 Fabric-CA 服务器的主目录中。SQLite 是一个嵌入式的小型的数据系统,但在一些特定的情况下,我们需要集群来支持,所以Fabric-CA 也设计了支持其它的数据库系统(目前只支持 MySQL、PostgreSQL 两种)。Fabric-CA 在集群设置中支持以下数据库版本:

  • **PostgreSQL:**9.5.5 或更高版本
  • **MySQL:**5.7 或更高版本

下面我们来看如何配置来实现对不同数据库的支持。

6.3.3.1 配置 PostgreSQL

如果使用 PostgreSQL 数据库,则需要在 Fabric-CA 服务器端的配置文件进行如下设置:

db:
  type: postgres
  datasource: host=localhost port=5432 user=Username password=Password dbname=fabric_ca sslmode=verify-full

如果要使用 TLS,则必须指定 Fabric-CA 服务器配置文件中的 db.tls 部分。如果在 PostgreSQL 服务器上启用了 SSL 客户端身份验证,则还必须在 db.tls.client 部分中指定客户端证书和密钥文件。如下所示:

db:
  ...
  tls:
      enabled: true
      certfiles:
        - db-server-cert.pem
      client:
            certfile: db-client-cert.pem
            keyfile: db-client-key.pem

certfiles:PEM 编码的受信任根证书文件列表。

certfilekeyfile:Fabric-CA 服务器用于与 PostgreSQL 服务器安全通信的 PEM 编码证书和密钥文件。用于服务器与数据库之间的 TLS 连接。

关于生成自签名证书可参考官方说明:https://www.postgresql.org/docs/9.5/static/ssl-tcp.html,需要注意的是,自签名证书仅用于测试目的,不应在生产环境中使用。

有关在PostgreSQL服务器上配置SSL的更多详细信息,请参阅以下PostgreSQL文档:https://www.postgresql.org/docs/9.4/static/libpq-ssl.html

6.3.3.2 配置 MySQL

如果使用 MySQL 数据库,则需要在 Fabric-CA 服务器端的配置文件进行如下设置:

db:
  type: mysql
  datasource: root:rootpw@tcp(localhost:3306)/fabric_ca?parseTime=true&tls=custom

如果通过 TLS 连接到 MySQL 服务器,则还需要配置 db.tls.client 部分。如 PostgreSQL 的部分所述。

mySQL 数据库名称中允许使用字符限制。请参考:https://dev.mysql.com/doc/refman/5.7/en/identifiers.html

关于 MySQL 可用的不同模式,请参阅:https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html,为正在使用的特定MySQL版本选择适当的设置。

6.3.4 配置LDAP

LDAP(Lightweight Directory Access Protocol):轻量目录访问协议。

Fabric-CA服务器可以通过服务器端的配置连接到指定LDAP服务器。之后可以执行以下操作:

  • 在注册之前读取信息进行验证
  • 对用于授权的标识属性值进行验证

修改 Fabric-CA 服务器的配置文件中的LDAP部分:

ldap:
   enabled: false
   url: >://>:>@>:>/>
   userfilter: >
   attribute:
      names: >
      converters:
        - name: >
          value: >
      maps:
        :
            - name: >
              value: >

配置信息中各部分解释如下:

  • **scheme:**为 ldap 或 ldaps;

  • **adminDN:**是admin用户的唯一名称;

  • **adminPassword:**是admin用户的密码;

  • **host:**是LDAP服务器的主机名或IP地址;

  • **port:**是可选的端口号,默认 LDAP 为 389 ; LDAPS 为 636 ;

  • **base:**用于搜索的LDAP树的可选根路径;

  • **filter:**将登录用户名转换为可分辨名称时使用的过滤器;

  • **LDAPAttrs:**是一个LDAP属性名称数组,代表用户从LDAP服务器请求;

  • **attribute.converters:**部分用于将LDAP属性转换为结构CA属性,其中 fcaAttrName 是结构CA属性的名称; fcaExpr 是一个表达式。例如,假设是[“uid”],是’hf.Revoker’,而是’attr(“uid”)=〜“revoker *”’。这意味着代表用户从LDAP服务器请求名为“uid”的属性。如果用户的’uid’LDAP属性的值以 revoker 开头,则为 hf.Revoker 属性赋予用户 true 的值;否则,为 hf.Revoker 属性赋予用户 false 的值。

  • **attribute.maps:**部分用于映射LDAP响应值。典型的用例是将与LDAP组关联的可分辨名称映射到标识类型。

配置好 LDAP 后,用户注册的过程如下:

  1. Fabric-CA 客户端或客户端 SDK 使用基本授权标头发送注册请求。
  2. Fabric-CA 服务器接收注册请求,解码授权头中的身份名称和密码,使用配置文件中的 “userfilter” 查找与身份名称关联的 DN(专有名称),然后尝试 LDAP 绑定用户身份的密码。如果 LDAP 绑定成功,则注册被通过。

FAQ

  1. 在实际中 Fabric-CA 的身份信息保存在什么地方?

    可根据具体需求选择 Fabric-CA 支持的数据库,一般应用选择 SQLite 即可。中、大型应用选择 MySQL 或 PostgreSQL 或 LDAP

你可能感兴趣的:(Hyperledger,Fabric入门到进阶)