8.2 颁发数字证书的Fabric CA

本节介绍可选的Fabric CA服务,这是官方提供数字证书管理的一个默认实现。

8.2.1 概述

Fabric CA是超级账本的数字证书认证中心,它提供了如下功能:

·用户信息的注册;

·数字证书的发行;

·数字证书的延期与吊销。

Fabric CA由服务端和客户端组件组成,图8-1阐述了Fabric CA的组件在整个超级账本架构中的作用。

image.png

图8-1 Fabric CA架构示意图

Fabric CA服务端提供用户登记和注册的数字证书管理功能,数据存储后端可以是MySQL、PostgreSQL、LDAP等。如果配置了LDAP,用户信息存在 于LDAP中,而不是存放在MySQL或者PostgreSQL数据库中。通过数据存储和业务逻辑的分离,Fabric CA服务能够采用无状态的集群部署,通过HAProxy等软件实现负载均衡功能,实现服务的高可用。Fabric CA服务端提供了RESTful的接口供客户端工具和HFC SDK访问。手工部署的方式可以采用客户端工具来实现,如果集成到应用程序中,可以采用HFC SDK来实现。通过HFC SDK注册的证书有多种类型,包括user、app、peer、orderer、client、validator、auditor等,这些在Peer节 点、Orderer节点的部署时会用到,应用程序提交交易请求的时候也会用到。

8.2.2 Fabric CA服务端的安装部署

本节介绍Fabric CA服务端的安装部署。

(1)准备工作

安装Fabric CA之前需要做一些准备工作:

·安装Go语言1.9以上版本;

·设置好GOPATH环境变量;

·确认libtool和libtdhl-dev已安装。

Go语言的安装请参考第11章的相关内容。在Ubuntu系统下可以直接通过命令行安装libtool和libtdhl-dev:


sudo apt install libtool libltdl-dev

(2)安装Fabric CA服务端和客户端

使用下面的命令即可将fabric-ca-server和fabric-ca-client安装至$GOPATH/bin下:


go get -u github.com/hyperledger/fabric-ca/cmd/...

(3)通过命令行启动Fabric CA服务

初始化fabric-ca-server:


fabric-ca-server init -b admin:adminpw

-b选项提供注册用户的名称和密码,如果没有使用LDAP,这个选项是必需的。默认的配置文件的名称为fabric-ca-server-config.yaml,路径可以自定义。

启动fabric-ca-server,使用默认设置:


fabric-ca-server start -b admin:adminpw

-b选项提供注册用户的名称和密码,如果没有使用LDAP,这个选项是必需的。默认的配置文件的名称为fabric-ca-server-config.yaml,路径可以自定义。

(4)通过Docker Hub下载的镜像启动Fabric CA服务

访问https://hub.docker.com/r/hyperledger/fabric-ca/tags, 找到你想要获取的fabric-ca的版本。进入代码目录$GOPATH/src/github.com/hyperledger/fabric-ca /docker/server,在编辑器中打开docker-compose.yml,修改image为指定的镜像版本。下面是这个文件的示例:


 

fabric-ca-server:
   image: hyperledger/fabric-ca:x86_64-1.0.0
   container_name: fabric-ca-server
   ports:
       - "7054:7054"
   environment:
       - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
   volumes:
       - "./fabric-ca-server:/etc/hyperledger/fabric-ca-server"
   command: sh -c 'fabric-ca-server start -b admin:adminpw'


打开一个终端,进入docker-compose.yml所在的目录,执行如下命令:


docker-compose up -d

如果指定的镜像不存在,则Docker会主动拉取此镜像,然后启动fabric-ca服务实例。

(5)通过源码编译生成的Docker镜像,以启动Fabric CA服务

你可以通过下面的命令使用docker-compose编译和启动服务:


 

cd $GOPATH/src/github.com/hyperledger/fabric-ca
make docker
cd docker/server
docker-compose up -d


hyperledger/fabric-ca镜像同时包含Fabric CA的服务端fabric-ca-server和客户端fabric-ca-client。

(6)fabric-ca-server命令行选项


 

//帮助:
   fabric-ca-server [command]
//子命令:
   init        // 初始化fabric-ca-server
   start       // 启动fabric-ca-server
   version     // 打印fabric-ca-server版本信息
//选项:
   --address string            // fabric-ca-server的监听地址(默认"0.0.0.0")
   -b, --boot string           // 指定启动时的用户和密码,格式为user:pass
   --ca.certfile string        // PEM编码的证书文件(默认"ca-cert.pem")
   --ca.chainfile string       // PEM编码的链文件(默认"ca-chain.pem")
   --ca.keyfile string         // PEM编码的密钥文件(默认"ca-key.pem")
   -n, --ca.name string        // CA名字
   --cacount int               // 非默认CA实例的个数
   --cafiles stringSlice       // 逗号分隔的CA配置文件
   --crl.expiry duration       // 通过gencrl请求生成CRL的过期时间(默认24h0m0s)
   --crlsizelimit int          // 可接受的CRL大小限制(默认512000)
   --csr.cn string             // 对上级CA的证书签名请求的CN
   --csr.hosts stringSlice     // 对上级CA的证书签名请求中的主机列表,空格分割
   --csr.serialnumber string   // 对上级CA的证书签名请求中的序列号
   --db.datasource string      // 数据库特定的数据源(默认"fabric-ca-server.db")
   --db.tls.certfiles stringSlice
   // PEM格式的信任的证书文件列表,逗号分隔(例如. root1.pem,root2.pem)
   --db.tls.client.certfile string
   // DB客户端PEM编码的证书文件,仅当服务器要求双向认证时才指定
   --db.tls.client.keyfile string
   // DB客户端PEM编码的密钥文件,仅当服务器要求双向认证时才指定
   --db.type string
   //数据库的类型,可以是SQLite、Postgres、MySQL(默认sqlite3)
   -d, --debug // 打开调试级别日志
   -H, --home string
   // server的home目录(默认"/etc/hyperledger/fabric-ca")
   --intermediate.enrollment.label string      // 使用HSM操作的标签
   --intermediate.enrollment.profile string    // 发行证书时签名profile的名字
   --intermediate.parentserver.caname string   // 连接上级CA时用的CN
   -u, --intermediate.parentserver.url string
   // 上级CA的URL(格式http://<username>:<password>@<address>:<port)
   --intermediate.tls.certfiles stringSlice
   // 逗号分隔的PEM编码的证书列表(e.g. root1.pem,root2.pem)
   --intermediate.tls.client.certfile string
   // PEM编码的证书文件,仅当服务器要求双向认证时才指定
   --intermediate.tls.client.keyfile string
   // 客户端PEM编码的密钥文件,仅当服务器要求双向认证时才指定
   --ldap.enabled      // 打开LDAP
   --ldap.groupfilter string
   // LDAP组过滤(默认"(memberUid=%s)")
   --ldap.tls.certfiles stringSlice
   // LDAP信任的,用逗号分隔的证书列表(例如,root1.pem,root2.pem)
   --ldap.tls.client.certfile string
   // LDAP客户端PEM编码的证书文件,仅当服务器要求双向认证时才指定
   --ldap.tls.client.keyfile string
   // 客户端PEM编码的密钥文件,仅当服务器要求双向认证时才指定
   --ldap.url string
   // LDAP客户端URL(格式ldap:adminDN:adminPassword@host[:port]/base)
   --ldap.userfilter string
   // LDAP用户过滤器(默认"(uid=%s)")
   -p, --port int
   // fabric-ca-server监听端口(默认7054)
   --registry.maxenrollments int
   // 注册的最大次数,LDAP关闭时有效(默认-1)
   --tls.certfile string
   // 服务器监听地址所用的PEM编码的TLS证书文件(默认"tls-cert.pem")
   --tls.clientauth.certfiles stringSlice
   // 逗号分隔的可信的客户端证书列表(例如. root1.pem,root2.pem)
   --tls.clientauth.type string
   // 客户端认证策略.(默认"noclientcert")
   --tls.enabled       // 以TLS方式监听
   --tls.keyfile string
   // 服务器监听地址所用的PEM编码的私钥文件


使用“fabric-ca-server[command]--help”可获取更多子命令信息。

下面我们来看一下Fabric CA的数据库存储。默认的数据库采用的是嵌入式数据SQLite,文件名是fabric-ca-server.db。如果需要考虑集群部署,可以采用MySQL或者PostgreSQL数据库。

1.基于MySQL的数据存储

在Fabric CA服务端的配置文件中添加下面的内容就可以访问MySQL数据库。但要确保其他相关变量也要配置正确。比如数据库名字对字符集的限制,可参考MySQL文档https://dev.mysql.com/doc/refman/5.7/en/identifiers.html


 

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


如果要通过TLS连接MySQL数据库,必须设置db.tls,同时MySQL也要配置允许TLS访问。配置文件的示例如下所示:


 

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


其中,certfiles是PEM编码的可信根证书文件列表,certfile和keyfile是PEM编码的证书和密钥文件,用于Fabric CA服务器与MySQL数据库之间的安全连接。

2.基于PostgreSQL的数据存储

如果采用PostgreSQL数据库,Fabric CA服务端的配置文件可以参考如下的配置:


 

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


在PostgreSQL上配置SSL的步骤如下:

1)在postgresql.conf中,打开SSL,设置为on(SSL=on)。

2)将你信任的CA证书root.crt放在PostgreSQL的data目录中。

3)在pg_hba.conf中hostssl位置,设置clientcert参数为1。

关于如何生成签名证书,可参考https://www.postgresql.org/docs/9.5/static/ssl-tcp.html,自签名证书可用于测试,不应该用于产品环境中。

更多详细配置,可参考PostgreSQL的官方文档https://www.postgresql.org/docs/9.4/static/libpq-ssl.html

3.基于LDAP的数据存储

Fabric CA服务端可以通过配置连接至LDAP服务器,实现如下的功能:

·用户注册时从LDAP服务器中读取信息进行认证;

·用户鉴权时从LADP服务器中读取属性信息进行验证。

配置的方式是修改Fabric CA服务器配置文件内的LDAP选项,如下是配置文件的模板:


 

ldap:
   # 使能或者禁止LDAP客户端(默认为: false)
   enabled: false
   # LDAP服务器的URL
   url: <scheme>://<adminDN>:<adminPassword>@<host>:<port>/<base>
   userfilter: filter


其中:

·scheme为ldap或ldaps;

·adminDN为管理员唯一的名字;

·pass为管理员的密码;

·host LDAP为服务器的主机名或IP地址;

·Port为可选端口,默认值为389(ldap)或636(ldaps);

·base为用于搜索LDAP树的根路径;

·filter为过滤器,在搜索时将登录名转换为唯一名字。

下面是一个具体的示例,可连接默认配置的OpenLDAP服务器。


 

ldap:
   enabled: true
   url:
ldap://cn=admin,dc=example,dc=org:admin@localhost:10389/dc=example,dc=org
   userfilter: (uid=%s)


OpenLDAP服务的配置使用可参考https://github.com/osixia/docker-openldap上的说明。

配置好LDAP服务器后,用户注册过程如下所示:

1)Fabric CA客户端或客户端SDK发送带有基本授权头部的用户注册请求;

2)Fabric CA服务器接收到用户注册请求后,解析出头部中的用户名称和注册密码。通过在配置文件中设置“userfilter”可以查找用户对应的可识别名称 (Distinguished Name,DN),尝试执行LDAP绑定用户的注册密码进行身份验证。如果绑定成功,则用户注册就被认证通过了。

8.2.3 Fabric CA服务端的操作使用

本节我们会介绍两种访问Fabric CA服务端的方法:Fabric CA客户端工具和RESTful接口,客户端本身也是调用服务端RESTful接口实现的。客户端工具能比较直观地使用命令就能实现和服务端的交互,所以 我们先介绍客户端工具,再介绍服务端的RESTful接口。

1.Fabric CA客户端的使用

本节先介绍fabric-ca-client工具的命令行选项,再逐个介绍各个子命令的使用。

(1)fabric-ca-client命令行选项

我们先看一下Fabric CA客户端的命令行选项:


 

//帮助
 fabric-ca-client [command]

//子命令:
   enroll      //用户注册
   gencrl      //生成CRL
   gencsr      //生成CSR
   getcacert   //获取CA证书链
   reenroll    //重新注册
   register    //用户登记
   revoke      //用户注销
   version     //打印Fabric CA客户端版本

//参数
           --caname string                // CA的名字
           --csr.cn string                // 证书签名请求的CN名字
           --csr.hosts stringSlice        // 证书签名请求的主机名列表,用空格分隔
           --csr.names stringSlice
           // 证书签名请求的名字列表,格式为<name>=<value> (例如,C=CA,O=Org1)
           --csr.serialnumber string      // 证书签名请求的序列号
   -d, --debug                            // 打开调试级别日志
           --enrollment.attrs stringSlice
           // 用逗号分隔的属性列表,格式为<name>[:opt] (例如,foo,bar:opt)
           --enrollment.label string      // 使用HSM的标签
           --enrollment.profile string     // 发行证书使用签名profile的名字
   -H, --home string          // 客户端home目录(默认为"$HOME/.fabric-ca-client")
           --id.affiliation string         // 身份对应的隶属关系
           --id.attrs stringSlice
           // 用逗号分隔的属性列表,格式为<name>=<value>(例如,foo=foo1,bar=bar1)
           --id.maxenrollments int        // 注册的最大次数(默认为-1)
           --id.name string               // 注册者身份的唯一名字(DN)
           --id.secret string             // 注册者的密码
           --id.type string
           // 注册者的类型(例如,'peer, app, user')(默认为"user")
   -M, --mspdir string                    // MSP的目录路径(默认为"msp")
   -m, --myhost string
           // 注册时指定CSR中的主机名(默认为"$HOSTNAME")
   -a, --revoke.aki string                // 注销证书的AKI
   -e, --revoke.name string               // 注销的身份名字
   -r, --revoke.reason string             // 注销原因
   -s, --revoke.serial string             // 注销证书的序列号
       --tls.certfiles stringSlice
           // PEM编码的信任证书列表,用逗号分隔(例如,root1.pem,root2.pem)
       --tls.client.certfile string
           // 客户端PEM编码的证书,仅当服务器要求双向认证时才指定
       --tls.client.keyfile string
           // 客户端PEM编码的密钥,仅当服务器要求双向认证时才指定
   -u, --url string       // fabric-ca-server的URL (默认为"http:localhost:7054")


使用“fabric-ca-client[command]--help”可查看子命令帮助

后面我们会介绍其中主要的命令行功能。

(2)注册初始化的管理员用户

在Fabric CA服务端启动的时候有一个管理员用户,需要先注册初始化的管理员用户,获取注册证书以后才能进行后续的操作。注册初始化的管理员用户的步骤如下:

首先,在Fabric CA服务端配置文件fabric-ca-server-config.yaml中设置客户端的CSR(证书签名请求),里面的选项是可以自定义的,只有“csr.cn”必须设置成初始化的管理员ID。默认的CSR配置如下:


 

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


然后,运行fabric-ca-client enroll命令来获取注册证书。在下面的命令中,先设置获取注册证书存储目录的环境变量,访问运行在本地7054端口的fabric-ca服务端,注册的用户ID和密码分别是admin和adminpw。


 

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


上面的注册命令将获取的注册证书ECert和对应的私钥,CA证书链PEM文件存储在了环境变量FABRIC_CA_CLIENT_HOME目录下的msp子目录中。

(3)登记一个新用户

只有已经注册的用户才可以发起登记(Register)请求,发起登记请求的用户称为登记员(Registrar),登记新用户的时候还需要有相应的权限。Fabric CA服务端在接收到登记请求时需要进行如下几个方面的检查:

1)登记员需要有登记用户的登记权限:登记员可以登记的用户类型记录在“hf.Registrar.Roles” 属性中,如果这个属性保存的内容是“peer,app,user”,则登记员就可以登记peer、app和user类型的用户,但是不能登记 orderer类型的用户。

2)登记员只能登记自己归属范围内的用户:比如登记员的归属是a.b,可以登记归属是a.b.c的用户,不能登记归属是a.c的用户。如果不指定登记用户的归属,那么默认就和登记员的归属一样。

3)登记的用户属性需要满足如下一些条件。

①登记的用户属性需要包含在登记员的用户属性“hf.Registar.Attributes”中。目前只支持“*”通配符,比如a.b.*代表所有以a.b开头的属性名称。

②如果登记的用户也有hf.Registar.Attributes属性,需要其是登记员用户属性 hf.Registar.Attributes的子集。比如登记员的hf.Registar.Attributes属性值是a.b.*,x.y.z,则登 记用户的hf.Registar.Attributes属性值是a.b.c,x.y.z就是允许的,因为登记用户的属性a.b.c满足登记员的属性 a.b.*,同时都有相同的属性x.y.z。

我们再来看几个在登记用户时属性检查的几个例子,表8-6所示为登记员和登记用户属性的名称都是hf.Registar.Attributes。

表8-6 登记用户时的属性检查示例

image.png

在下面的命令中,登记员是admin,登记的新用户名称是“admin2”,affiliation属性为 “org1.department1”,属性名“hf.Revoker”的值是“true”,属性名“admin”的值是“true”。命令中 “:ecert”后缀的意思是admin属性及其值会添加到用户注册证书中,从而用来实现访问控制。


 

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client register --id.name admin2 --id.affiliation org1.department1 --id.
attrs 'hf.Revoker=true,admin=true:ecert'


命令运行后会打印注册密码,用户注册的时候需要这个注册密码。

在登记用户的时候可以使用“-id.attrs”选项同时指定多个属性,属性之间用逗号分隔,每个属性使用双引号,下面是一个具体的例子,同时登记了“hf.Registrar.Roles”属性和“hf.Revoker”属性:


 

fabric-ca-client register -d --id.name admin2 --id.affiliation org1.department1
--id.attrs '"hf.Registrar.Roles=peer,user",hf.Revoker=true'


指定属性的“-id.attrs”选项也可以有多个同时使用,下面的例子登记的是相同的“hf.Registrar.Roles”属性和“hf.Revoker”属性:


 

fabric-ca-client register -d --id.name admin2 --id.affiliation org1.department1
--id.attrs '"hf.Registrar.Roles=peer,user"' --id.attrs hf.Revoker=true


登记用户的默认值可以保存在Fabric CA的客户端配置文件中,假设配置文件如下所示:


 

id:
   name:
   type: user
   affiliation: org1.department1
   maxenrollments: -1
   attributes:
       - name: hf.Revoker
           value: true
       - name: anotherAttrName
           value: anotherAttrValue


用客户端命令行工具执行下面的命令登记用户,这样会从上面的配置文件中读取默认值,包括身份类型“user”,归属“org1.department1”,以及两个属性“hf.Revoker”和“anotherAttrName”。


 

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client register --id.name admin3


下面我们登记一个Peer节点,登记时指定用户类型为“peer”,用户名称是“peer1”,用户归属是“org1.department1”,注册密码不采用服务端自动生成,手动设置为“peer1pw”:


 

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client register --id.name peer1 --id.type peer --id.affiliation org1.
department1 --id.secret peer1pw


(4)Peer节点的注册

通过命令行在Fabric CA服务端登记了Peer节点后,就可以通过登记的用户名称和注册密码获取注册证书了。在下面的命令中,用户名称和注册密码分别是:“peer1”和“peer1pw”,选项-M的值为Peer节点的MSP目录,它保存获取到的注册证书等信息。


 

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


Orderer节点的注册过程是类似的,只需将对应的MSP目录路径改为你的orderer对应的MSP目录。

(5)重新获取用户的注册证书

假如你的注册证书将要过期或者私钥泄露,那么你可以调用reenroll命令重新申请新的注册证书。


 

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


(6)用户注销

一个身份或证书是可以被注销的。注销身份会注销其拥有的所有证书,也会同时阻止其申请新的证书。注销证书只是对单个证书进行无效处理。

下面的命令禁用了一个身份,并注销了与身份相关的所有的证书。注销后,此身份发起的任何请求都会被拒绝。


fabric-ca-client revoke -e <enrollment_id> -r <reason>

例如,下面的命令使用admin注销了peer1的身份。


 

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


也可以通过API和序列号注销:


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

例如,你可以使用openssl命令获得证书的API和序列号,然后传递给revoke命令


 

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


(7)获取CA证书链

在MSP目录的子目录cacerts下,存储的是可信的CA根证书。可以通过fabric-ca-client getcacerts命令从Fabric CA服务器获取根CA证书。

我们来看一个例子,下面的命令启动一个名称为“CA2”的Fabric CA服务,监听的端口是7055,初始的管理员用户名称和密码分别是:“admin”和“ca2pw”:


 

export FABRIC_CA_SERVER_HOME=$HOME/ca2
fabric-ca-server start -b admin:ca2pw -p 7055 -n CA2


下面的命令可以获取CA2的根CA证书并保存到peer1的MSP目录下:


 

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
fabric-ca-client getcacert -u http://localhost:7055 -M $FABRIC_CA_CLIENT_HOME/
msp


(8)使用TLS

Fabric CA客户端可以通过配置fabric-ca-client-config.yaml使用TLS。


 

tls:
   # 使能TLS(默认: false)
   enabled: true
   certfiles:
       - root.pem
   client:
       certfile: tls_client-cert.pem
       keyfile: tls_client-key.pem


其中,certfiles选项设置信任的根证书,client选项仅在服务器设置双向认证后才必须指定。

2.Fabric CA的RESTful接口

Fabric CA提供了多个接口,包括获取CA信息、获取注册证书、重新获取注册证书、用户登记、用户注销、批量获取交易证书等。Fabric CA提供的RESTful的接口,可以通过http或https访问。

(1)获取CA信息

表8-7是获取CA信息请求的URL。

表8-7 获取CA信息请求的URL

image.png

获取CA信息请求的Header信息如下所示:


Content-Type: application/json

获取CA信息请求的Body内容如下所示:


 

{
   "caname": "ca.fabric.chainnova.xyz"
}


获取CA信息返回的Body如下所示:


 

{
   "success":true,
   "result":{
       "CAName":"ca.fabric.chainnova.xyz",
       "CAChain":"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVekNDQWZtZ0F3SUJB
       Z0lRRnlXZ1piZy9OUjZKUUw2SDR3TS9TakFLQmdncWhrak9QUVFEQWpCN01Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RWRNQnNHQTFVRUNoTVVabUZpY21sakxtTm9ZV2x1Ym05MllTNTRlWG94SURBZUJnTlZCQU1UCkYyTmhMbVpoWW5KcFl5NWphR0ZwYm01dmRtRXVlSGw2TUI0WERURTNNRGd5T1RBeU16Z3dNMW9YRFRJM01EZ3kKTnpBeU16Z3dNMW93ZXpFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVQpCZ05WQkFjVERWTmhiaUJHY21GdVkybHpZMjh4SFRBYkJnTlZCQW9URkdaaFluSnBZeTVqYUdGcGJtNXZkbUV1CmVIbDZNU0F3SGdZRFZRUURFeGRqWVM1bVlXSnlhV011WTJoaGFXNXViM1poTG5oNWVqQlpNQk1HQnlxR1NNNDkKQWdFR0NDcUdTTTQ5QXdFSEEwSUFCT2tBVnhlaWZ4c09kSzU5enJmeXFNWEx1eFU3MTI0SW1VdDRSYzN0VWpLNgpUVGt6dGRpNFJyUitXVDBoaHNzRVA3N1RBZjNGSVBzWXFoanZxbXVzVUFXalh6QmRNQTRHQTFVZER3RUIvd1FFCkF3SUJwakFQQmdOVkhTVUVDREFHQmdSVkhTVUFNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdLUVlEVlIwT0JDSUUKSU1nWTdaOGx3OS9QdksyWlk3T2tsS1MzM3pKUU5wNjZZTWc5RTcwR0lJL0VNQW9HQ0NxR1NNNDlCQU1DQTBnQQpNRVVDSVFEZU5Qa1Z6UUZxbWlSUEJodDZyRmNCS3BDWnhPYVpjRkdzbmM3QW81Nklnd0lnRHozSldzTTFWRmozCnlxTVgxYXNzb1hLMUlFODhuVzBlVE5rUHdHTStsSXc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
   },
   "errors":{
   },
   "messages":{
   }
}


(2)获取注册证书

表8-8是用户注册请求的类型和URL。

表8-8 用户注册请求的类型和URL

image.png

用户注册请求的Header信息如下所示:


 

Authorization: YWRtaW46YWRtaW5wdw==
Content-Type: application/json


用户注册请求的Body内容如下所示:


 

{
   "request": "string",
   "profile": "Unknown Type: string,null",
   "label": "Unknown Type: string,null",
   "caname": "Unknown Type: string,null"
}


用户注册请求返回的Body内容如下所示:


 

{
   "Success": true,
   "Result": "string",
   "Errors": [
       {
           "code": 0,
           "message": "string"
       }
   ],
   "Messages": [
       {
           "code": 0,
           "message": "string"
       }
   ]
}


(3)重新获取注册证书

表8-9是用户重新注册请求的类型和URL。

表8-9 重新注册请求的类型和URL

image.png

重新注册请求的Header信息如下所示:


 

Authorization: YWRtaW46YWRtaW5wdw==
Content-Type: application/json


重新注册请求的Body内容如下所示:


 

{
   "request": "string",
   "profile": "Unknown Type: string,null",
   "label": "Unknown Type: string,null",
   "caname": "Unknown Type: string,null"
}


重新注册请求返回的Body内容如下所示:


 

{
   "Success": true,
   "Result": "string",
   "Errors": [
       {
           "code": 0,
           "message": "string"
       }
   ],
   "Messages": [
       {
           "code": 0,
           "message": "string"
       }
   ]
}


(4)用户登记

表8-10是用户登记请求的类型和URL。

表8-10 用户登记请求的类型和URL

image.png

用户登记请求的Header信息如下所示:


 

Authorization: YWRtaW46YWRtaW5wdw==
Content-Type: application/json


用户登记请求的Body内容如下所示:


 

{
   "id": "string",
   "type": "string",
   "secret": "Unknown Type: string,null",
   "max_enrollments": "Unknown Type: integer,null",
   "affiliation_path": "string",
   "attrs": [
       {
           "name": "string",
           "value": "string"
       }
   ],
   "caname": "Unknown Type: string,null"
}


用户登记请求返回的Body内容如下所示:


 

{
   "Success": true,
   "Result": {
       "credentials": "string"
   },
   "Errors": [
       {
           "code": 0,
           "message": "string"
       }
   ],
   "Messages": [
       {
           "code": 0,
           "message": "string"
       }
   ]
}


(5)用户注销

表8-11是用户注销请求的类型和URL。

表8-11 用户注销的类型和URL

image.png

用户注销请求的Header信息如下所示:


 

Authorization: YWRtaW46YWRtaW5wdw==
Content-Type: application/json


用户注销请求的Body内容如下所示:


 

{
   "id": "Unknown Type: string,null",
   "aki": "Unknown Type: string,null",
   "serial": "Unknown Type: string,null",
   "reason": "Unknown Type: string,null",
   "caname": "Unknown Type: string,null"
}


用户注销请求返回的Body内容如下所示:


 

{
   "Success": true,
   "Result": "string",
   "Errors": [
       {
           "code": 0,
           "message": "string"
       }
   ],
   "Messages": [
       {
           "code": 0,
           "message": "string"
       }
   ]
}


(6)批量获取交易证书

表8-12是批量获取交易证书请求的类型和URL。

表8-12 批量获取交易证书请求的类型和URL

image.png

批量获取交易证书请求的Header信息如下所示:


 

Authorization: YWRtaW46YWRtaW5wdw==
Content-Type: application/json


批量获取交易证书请求的Body内容如下所示:


 

{
   "count": 0,
   "attr_names": [
       "string"
   ],
   "encrypt_attrs": true,
   "validity_period": 0,
   "caname": "Unknown Type: string,null"
}


批量获取交易证书请求返回的Body内容如下所示:


 

{
   "Success": true,
   "Result": {
       "id": 0,
       "ts": 0,
       "key": "string",
       "tcerts": [
           {
               "cert": "string",
               "keys": [
                   {
                       "name": "string",
                       "value": "string"
                   }
               ]
           }
       ]
   },
   "Errors": [
       {
           "code": 0,
           "message": "string"
       }
   ],
   "Messages": [
       {
           "code": 0,
           "message": "string"
       }
   ]
}

本章介绍了与成员管理相关的两个服务,MSP和Fabric CA。Fabric CA负责颁发证书,可以有多种方式实现。Fabric CA是超级账本提供的默认实现,并不是强制使用的。MSP利用生成的证书进行签名和验证,把不同的证书归属到不同的MSP中,利用PKI机制验证成员身 份,实现成员的认证和授权管理。

来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=1059

'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646208", container: s }); })();
'); (window.slotbydup = window.slotbydup || []).push({ id: "u3646147", container: s }); })();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值