Fabric账号服务器:Fabric-ca

caFabric-ca项目是专门为了解决Fabric账号问题而发起的一个开源项目,它非常完美地解决了Fabric账号生成的问题。Fabric-ca项目由Fabric-ca-server和Fabric-ca-client这两个模块组成。其中Fabric-ca-server模块在Fabric项目占有非常重要的作用,具体可以参考图6-1。

Fabric-ca在Fabric系统中的作用示意图

一、Fabric-ca的编译和安装

Fabric-ca也是用Golang开发的应用程序,因此Fabric-ca的编译过程和Fabric其他组件的编译过程是类似的。下面将演示Fabric-ca在Ubuntu和MacOS系统上面的安装。

1、Fabric-ca在Ubuntu和CentOS上面的安装

第一步:安装系统组件包。

blob.png

如果在CentOS上面安装,则需要执行命令yum install libtool libltdl-dev,其他的步骤是一样的。

第二步:下载源代码并编译。

blob.png

第三步:安装编译好的可执行文件。

blob.png

第四步:检查。

blob.png

显示版本信息为安装正确。

2.Fabric-ca在MacOS上面的安装

第一步:安装系统组件包。

blob.png

第二步:下载源代码并编译。

在编译之前需要打开$GOPATH/src/github.com/hyperledger/fabric-ca下面的Makefile文件找到其中的第一个GO_LDFLAGS,并在该行末尾加上-s:

blob.png

第三步:安装编译好的可执行文件。

blob.png

第四步:检查。

blob.png

显示版本信息为安装正确。

二、fabric-ca-server的启动和配置

fabric-ca-server启动之后是以守护进程方式存在,可以通过fabric-ca-client或者实现其通信协议的客户端发起请求。fabric-ca-serve有三种方式设置配置信息,分别是启动参数、环境变量和配置文件。

1、fabric-ca-server的命令行选项

fabric-ca-server模块有三个子命令,这三个子命令分别是:

·init:初始化fabric-ca服务器。

·start:启动fabric-ca服务器。

·version:显示版本。

2.fabric-ca-serve的选项

fabric-ca-serve的子命令没有各自独有的命令行选项,所有的子命令共用一组通用的全局选项,这些选项及其作用如下所示:

·--address:Fabric-ca服务器的监听地址(默认为“0.0.0.0”)。

·-b,--boot:系统启动对应的管理员账号和密码。

·--ca.certfile:CA证书文件(默认为“ca-cert.pem”)。

·--ca.chainfile:CA链证书文件(默认为“ca-chain.pem”)。

·--ca.keyfile:CA密钥文件(默认为“ca-key.pem”)。

·-n,--ca.name:证书颁发机构名称。

·--cacount:CA实例的数量。

·--cafiles:以逗号分隔的CA配置文件的列表。

·--crl.expiry:CRL请求到期时间(默认为24h)。

·--crlsizelimit:可接受的CRL的大小限制,以字节为单位(默认为512000)。

·--csr.cn:请求父Fabric-ca服务器的证书签名时使用的公用名称。

·--csr.hosts:逗号分隔的父类Fabric-ca服务器的主机名,支持多个。

·--csr.serialnumber:请求父类Fabric-ca服务器的序列号。

·--db.datasource:数据库的名称(默认为“fabric-ca-server.db”),仅仅针对--db.type选项为sqlite3时有效。

·--db.tls.certfiles:和数据库TLS通信时用的证书文件,PME格式(例如root1.pem,root2.pem)。

·--db.tls.client.certfile:和数据库进行TLS通信时客户端的证书文件,PME格式。

·--db.tls.client.keyfile:和数据库进行TLS通信时客户端的私钥文件,PME格式。

·--db.type:存储账号类型的数据库的类型;目前支持三种数据库类型,包括sqlite3、postgres、mysql(默认为“sqlite3”)。

·-d,--debug:启用调试级别日志记录。

·-H,--home:Fabric-ca服务器的主目录(默认为当前目录)。

·--intermediate.enrollment.label:操作中使用的标签。

·--intermediate.enrollment.profile:发行证书时要使用的签名配置文件的名称。

·--intermediate.parentserver.caname:服务器CA名称。

·-u,--intermediate.parentserver.url:父Fabric-ca服务器的URL。

·--ldap.enabled:启用LDAP服务进行客户端身份验证和相关属性的管理。

·--ldap.groupfilter:LDAP进行组过滤模式,默认值为(memberUid=%s)。

·--ldap.tls.certfiles:LDAP服务器的证书文件,PEM格式(例如root1.pem,root2.pem)。

·--ldap.tls.client.certfile:LDAP服务客户端的证书文件,PEM格式。

·--ldap.tls.client.keyfile:LDAP服务的客户端私钥文件,PEM格式。

·--ldap.url:LDAP服务的URL。

·--ldap.userfilter:LDAP服务器的用户过滤器,默认为(uid=%s)。

·-p,--port:Fabric-ca服务器监听端口(默认值为7054)。

·--registry.maxenrollments:最大允许注册的用户数;如果LDAP未启用时有效(默认为-1)。

·--tls.certfile:Fabric-ca服务器的证书,PEM格式(默认“tls-cert.pem”)。

·--tls.clientauth.certfiles:Fabric-ca服务器的客户端证书(例如root1.pem,root2.pem)。

·--tls.clientauth.type:客户端类型(默认为“noclientcert”)。·--tls.enabled:在监听端口上启用TLS。

3.fabric-ca-server的初始化

除了命令行参数,fabric-ca-server还可以通过配置文件进行参数设置。执行fabric-ca-server的命令init,可以初始化生成相关的配置文件。在执行init命令之前需要创建相关的文件夹,本书例子的文件夹目录是采用如下命令创建的:

blob.png

fabric-ca-server服务器初始化的命令如下:

blob.png

-b参数后面的是fabric-ca-server服务器管理账号的用户名和密码,这里给出的是个例子,而且很多资料都给出了这个例子,但是如果在生产系统中建议务必使用比较复杂的密码,而避免使用本例中的用户名和密码,避免恶意猜测用户名和密码的行为。

fabric-ca-server初始化命令执行完成之后会在当前的目录下面生成相应的配置文件,这些文件的名字及其作用如下所示:

·fabric-ca-server-config.yaml:配置文件。

·fabric-ca-server.db:数据库文件(数据库选择sqlite3时有效)。

·ca-cert.pem:证书文件。

·msp:私钥文件夹。

4.fabric-ca-server的配置文件

fabric-ca-server配置文件的内容可以参考上一步生成的文件fabric-ca-server-config.yaml的内容,本书不在复述。这里我们重点介绍以下这些配置的组成部分和各个选项的功能。

fabric-ca-server-config.yaml文件也采用了YAML格式,如果你对YAML格式不是很熟悉,可以先参考YAML相关资料。

fabric-ca-server的配置文件一共分为11个部分,下面将详细介绍各个部分的内容。

(1)通用配置部分

通用配置部分包含了系统一些公用属性,比如端口、运行模式等,具体配置信息如下所示:

blob.png

(2)tls

tls部分主要包含了TLS通信相关的配置,包括是否需要打开TLS通信,TLS通信的证书和私钥等文件的路径等,具体配置信息如下所示:

blob.png

blob.png

(3)ca

ca服务器属性的配置,包含发布证书的组织机构的名称和相关的证书文件路径等,具体配置信息如下所示:

blob.png

(4)registry

registry节点包含了客户端注册相关的信息,具体配置信息如下所示:

blob.png

blob.png

其中,maxenrollments是同一个用户名和密码允许执行enrollment的次数,-1为不限制,0表示不支持登记。

(5)db

db部分包含了Fabric-ca服务器存储账号文件的数据类型的配置,Fabric-ca服务器目前支持sqlite3、postgres和mysql三种数据库,选择任何一种数据库在启动Fabric-ca服务器之前都需要安装,Fabric-ca本身不会自动安装这些数据库引擎。db部分的配置示例如下:

blob.png

db部分的配置中选择不同的数据库服务器配置格式是不一样的,不同的数据库对应的配置格式是不一样的,具体配置信息如下所示:

选择sqlite3存储账号:

blob.png

系统启动会在启动目录下面生成数据库文件fabric-ca-server.db,数据库文件名由datasource节点设置,该文件为sqlite3的数据库文件。

选择mysql存储账号:

blob.png

postgres存储账号:

blob.png

如果使用mysql或者postgres存储账号,可以选择配置采用TLS加密的方式和服务器进行通信。具体的配置信息如下所示:

blob.png

(6)ldap

Fabric-ca可以配置使用远端LDAP服务器来进行注册管理并且保存注册相关的数据,LDAP服务相关的配置信息包含在ldap节点中,具体配置信息如下所示:

blob.png

blob.png

(7)affiliations

affiliations节点包含了组织中的部门的相关配置信息,这些配置信息在客户端SDK调用时相关的参数必须保持一致。affiliations配置信息如下所示:

blob.png

在通过Fabric的客户端SDK访问Fabric-ca服务器的时候,相关的方法需要设置affiliations的参数时,需要跟这里的配置保持一致,否则无法正确访问。

(8)signing节点

signing节点包含了证书签发相关的配置,包括证书的到期时间等属性。signing相关的配置信息如下所示:

blob.png

blob.png

(9)csr

csr节点包含了证书申请请求时需要使用的配置信息。如果当前CA服务器是作为根CA服务器存在的,那么需要设置这些属性。csr相关的配置信息如下所示:

blob.png

blob.png

(10)bccsp节点

bccsp节点包含了加密算法相关的配置,在bccsp节点中可以选择相关的加密算法以及相关加密算法的证书文件。bccsp节点的配置信息如下所示:

blob.png

(11)intermediate

当前CA作为中间层时相关的配置。如果当前CA服务器需要从上级CA服务器获取授权才能工作,需要配置intermediate节点的相关属性。intermediate节点的配置信息如下所示:

blob.png

5.fabric-ca-server的启动配置文件设置好之后就可以启动fabric-ca-server服务器了,启动命令如下:

blob.png

启动完成后可以通过客户端程序或者通过fabric-ca-client模块访问fabric-ca-server服务器。

868区块链学习网为您整理《Fabric账号服务器:Fabric-ca》仅供参考。