• Fabric CA/数字证书管理


    MSP(Membership Service Provider)成员管理服务提供商

    名词:

    1。CSR(Cerificate Signing Request):证书签署请求文件

        CSR里包含申请者的 DN(Distinguished Name,标识名)和公钥信息(在第三方机构签署证书时要提供)。

        证书颁发机构拿到 CSR 后使用其根证书私钥对证书进行加密并生成 CRT 证书文件,里面包含证书加密信息、申请者的 DN 、公钥信息。

    一。概述

    说明:

    MSP是Hyperledger Fabric1.0引入的一个组件。目的:抽象化各成员之间的控制结构关系。(MSP将证书颁发/用户认证/后台加密机制和协议都进行了抽象)

    每个MSP可定义自己规则:身份认证/签名的生成/认证。

    每个Hyperledger Fabric 1.0区块链网络可引入一个/多个MSP来进行网络管理。(即将成员本身和成员间操作、规则、流程都模块化)

    1。成员身份是基于标准的x.509证书。利用PKI体系为每个成员颁发数字证书。结合所属MSP进行身份认证和权限控制。

    2。根CA证书(Root Certificate):

    【1】自签名证书

    【2】用根CA证书私钥签名的证书还可签发新的证书

    3。中间CA证书(Intermediate Certificate)

    【1】由其他CA证书签发

    【2】用中间CA证书私钥签名的证书还可签发新的证书

    签发证书是一个“信任背书”的过程。从根CA证书-》最终用户证书(构成一个“证书信任链”)

    4。PKI体系可利用“CRL(Certificate Revocation List)”/“OCSP(Online Certificate Status Protocal)”管理证书有效性

    【1】MSP标识检查(身份证书都是和MSP绑定的,必须有相同的MSP标识才能验证证书的有效性)

    【2】证书路径检查(主要证书路径[从用户证书-》根CA证书路径])

    【3】CRL检查(主要检查证书是否被吊销,目前仅支持CRL不支持OCSP)

    二。生成MSP证书

    说明:

    OpenSSL可生成X.509证书,但在Hyperledger Fabric1.0中不支持包含RSA密钥的证书。

    下述采用cryptogen工具来生成MSP证书:

    //下载fabric源码
    cd /opt/gopath/src/github.com/hyperledger
    git clone https://github.com/hyperledger/fabric.git
    
    //查看当前分支release1.3,切换分支为1.0
    git branch  #当前分支
    git branch -r #查看所有分支
    git checkout origin/release-1.0  #切换分支
    
    //生成MSP证书工具在目录e2e_cli目录下
    cd examples/e2e_cli
    
    //调用e2e的工具生成证书
    ./generateArtifacts.sh
    
    注:命令执行成功后,会在e2e_cli目录下产生文件夹crypto-config。
    在这个MSP中配置了两个组织(org1/org2)
    每个组织下有两个peer节点(peer0/peer1):排序服务节点/CA节点

    配置节点的MSP证书

    cd base
    vi docker-compose-base.yml   //基础镜像

    三。MSP配置的最佳实践

    1。组织与MSP间建立映射关系

    建议:实际组织和MSP间建立1:1对应关系

    1)一个组织对应多个MSP情况
    
    1个组织有N个部门。
    
    1个部门 > 1 MSP
    
    1个peer节点 > 1 MSP
    
    同一组织内,不同MSP(部门)的peer节点间不能互相认证。这样:同一组织的不同部门间不能同步数据。
    
    (2)多个组织对应一个MSP
    
    同一个联盟的不同组织间采用相同的成员管理架构,数据会在不同组织间同步。
    
    N个组织 > 1 MSP (跨组织同步数据)

    2。一个组织内部实现不同的权限控制

    1 组织 > N 部门,实现不同部门的权限控制
    
    实现一:为该组织内的所有部门定义一个MSP
    
    给peer节点配置MSP时,包含相同的:可信根CA证书列表、中间CA证书、管理员证书;不同的peer节点设置不同的所属部门(节点所属部门:利用证书和部门间映射的OrganizaionalUnitIdentifiers定义-msp/config.yaml)。
    
    问题:数据还会在不同peer节点间同步。(因为:peer节点在识别组织身份类型OrgIdentityType时,获取的是MSP标识,它会认为通道内相同MSP的节点都可以分发数据)
    
    实现二:给组织内的每个部门单独定义MSP
    
    (1)为peer节点配置MSP时,不同部门配置的可信中间CA证书、管理员证书可以是不同的;不同部门成员的证书路径也是不同的。
    
    解决问题:所有部门定义在同一个MSP中的问题
    
    产生问题:增加管理上复杂度
    
    (3)为每个部门设置不同的MSP
    
    利用证书和部门间映射OrganizationalUnitIdentifiers实现不同部门的权限控制,数据同步仍然会限制在不同部门内。

    3。不同类型的节点分别使用不同的MSP

    需求:客户端、Peer节点、排序服务节点分别设置不同的MSP(身份信息包含MSP标识,可确定身份)

    目的:验证背书的确是由peer节点签名而不是客户端/Orderer服务节点签名

    问题1:

    不同节点类型分别设置不同MSP,对应的可信中间CA证书也不一样;

    在通道设置时,需要包含不同的MSP及其可信中间CA证书,组织内的不同MSP成员才可访问通道里的数据。

    同时,背书策略可指定只有peer节点对应的MSP成员背书的交易才有效。(目的:实现只能是peer节点才能背书签名)

    同一个组织按不同节点类型设置MSP后,Peer节点都有相同MSP,Peer节点间数据同步不会受影响,但会影响Peer节点&客户端交互.

    在peer节点上,某些系统链码调用是和本地MSP相关的。
    
    如:只执行本地MSP配置的由管理员发起的安装链码(install)请求/加入通道(Joinchain)请求等
    
    应用程序执行这类系统调用时还需用到peer节点相同的MSP管理员签名密钥和证书
    
    若不把这类系统调用功能放在应用程序中实现,正常的背书请求响应是没有问题的,因为peer节点接收背书请求检查的是有没有通道的写权限。

    Peer节点接收背书请求检查的是有没有通道的写入权限。(因此可在配置通道策略时增加客户端MSP,C端即可向peer节点提交请求了)

    问题2:

    注册事件回调函数时,Peer节点只处理和本地MSP相同的C端发起的请求。若peer节点和C端属于不同的MSP,则会拒绝C端请求。

    若业务依赖事件处理,应用程序和peer节点还是需要采用相同MSP。

    4。区分管理员和CA证书

    注:不要把可信根CA证书/中间CA证书设置成MSP管理员证书。

    目的:将成员管理、签发证书、验证证书等不同职责拆分开来。方便管理和定位(安全做法)

    5。区分根CA证书和TLS的根CA证书

    说明:MSP的根CA证书、TLS的根CA证书、相关的中间CA证书需要存放到不同文件夹中。

    6。吊销已经颁发的证书

    说明:已经颁发的证书可以被吊销,方法如下:

    (1)。删除中间CA证书

          删除intermediatecerts目录下的证书,这样由中间CA证书签发的证书都属于无效证书

    (2)。增加CRL列表

         可把中间CA证书/单个证书添加到CRL列表

    重新配置本地MSP时:要删除intermediatecerts目录下的证书/crls目录下增加CRL列表证书即可。

    重新配置通道MSP时:需提交CONFIG_UPDATE的交易请求,生效后修改排序服务节点和peer节点的MSP配置。

    颁发数字证书的Fabric CA

    一。概述

    说明:

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

    1。用户信息的注册(身份认证,或者从 LDAP 中获取注册信息)

    2。数字证书的发行

    发行担保证书 ECerts (Enrollment Certificates)

    发行交易证书 TCerts (Transaction Certificates),保障 Hyperledger Fabric 区域链交易平台上的信息匿名性和不可追踪性;

    3。数字证书的延期和吊销

    Fabric CA由服务端  和  客户端组成(c/s架构)。下图描述了Fabric CA组件在整个超级账本架构中的作用:

    官方代码库:https://github.com/hyperledger/fabric-ca

    root CA不会直接为服务器/客户端签证。它会先生成几个中间CA(intermediate CAS).
    
    中间CA作为root CA的代表为服务器和客户端签证

    说明:

    1。Fabric CA服务端:

        提供用户登记和注册的数字证书管理功能,数据存储后端可以为Mysql/PostgreSQL/LDAP等。

        若配置LDAP,则用户信息存于LDAP(轻量目录访问协议)中。而不是mysql/PostgreSQL(自由的对象-关系型数据库服务器(数据库管理系统))。

    2。Fabric CA服务采用无状态的集群部署

        数据存储和业务逻辑分离,Fabric CA服务能够采用无状态集群部署。通过HAProxy等软件实现“负载均衡”&“服务高可用”

    3。Fabric CA服务端提供Restful接口,供客户端工具和HFC SDK访问。

       手工部署方式可采用客户端工具实现

       若集成到应用程序中,可采用HFC SDK来实现。(通过HFC SDK注册的证书有多种类型:user/app/peer/orderer/client/validator/auditor等)

    与 Fabric CA 服务端交互的方式有如下两种:
    
    A.通过 Fabric CA 客户端
    
    B.使用某种 Fabric SDK
    
    与 Fabric CA 服务端的所有通信,都是通过 REST API 进行的。详情可查看 fabric-ca/swagger/swagger-fabric-ca.json 处的 swagger 文档中的 REST API 部分。
    
    如图所示,Fabric CA 客户端或 SDK 的请求首先会到达 Fabric CA 集群前端的高可用负载均衡服务端,实际的 CA 服务由后端的某台Fabric CA 服务端提供。
    同一集群中的所有 Fabric CA 服务端共享相同的后端数据库(或 LDAP)集群,以确保证书和身份的一致性。

    二。Fabric CA服务端安装部署

    (一)准备工作

    1。安装GO语言1.9以上版本

    //Step1:切换root用户权限
    sudo passwd root     #设置密码
    su root
    
    //Step2:下载go
    wget -P /opt https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz
    
    -P指定下载到目录/opt目录下
    
    也可进入opt目录:cd /opt 直接下载
    
    wget  https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz
    
    //Step3:解压缩
    tar -C /opt -xzf go1.9.2.linux-amd64.tar.gz
    
    -C指定解压缩文件所在目录。
    
    也可进入/opt目录cd /opt直接解压缩
    
    tar -xzf go1.9.2.linux-amd64.tar.gz

    2。设置GOPATH环境变量

    //编辑文件
    vi /etc/profile
    
    //加入下述配置
    export GOROOT=/opt/go
    export GOPATH=/opt/gopath export GOBIN
    =$GOROOT/bin export PATH=$PATH:$GOBIN //退出保存 ESC->:wq //配置文件生效 source /etc/profile //查看go是否安装和配置环境变量成功 go version 显示:go version go1.9.2 linux/amd64 表示成功

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

    //安装libtool & libtdhl-dev
    
    apt install libtool libltdl-dev

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

    //安装git
    apt-get install git  
    
    //查看版本号
    git version  
    
    //安装Fabric CA服务端和客户端(fabric-ca-server & fabric-ca-client安装至$GOPATH/bin下)--需要花费一段时间
    go get -u github.com/hyperledger/fabric-ca/cmd/...
    注意:最新版本会有问题,可切换到1.0版本

    cd /opt/gopath/src/github.com/hyperleder/fabric-ca #进入fabric-ca目录

    git branch -r #查看所有分支

    git checkout origin/release-1.0

    cd
    /opt/gopath/src/github.com/hyperleder/fabric-ca/cmd/fabric-ca-server

    go build

    go install #安装faric-ca-server

    which fabric-ca-server #查看fabric-ca-server位置:/opt/go/bin/fabric-ca-server

    cd ../fabric-ca-client

    go build

    go install #安装fabric-ca-client

    which fabric-ca-client #查看fabric-ca-client位置:/opt/go/bin/fabric-ca-client

    (三)启动Fabric CA服务

    方法一:通过命令行启动Fabric CA服务

    //初始化fabric-ca-server (目录任意位置)
    fabric-ca-server init -b admin:adminpw
    
    //启动fabric-ca-server,使用默认设置(目录任意位置)
    fabric-ca-server start -b admin:adminpw

    -b选项:提供注册用户的名称和密码 注:若未用LDAP,则-b选项必须 默认配置文件名称:faric-ca-server-config.yaml。路径可自定义。

    openssl查看证书细节

    //打印出证书的内容:
    openssl x509 -in ca-cert.pem -noout -text

    方法二:通过Docker Hub下载的镜像启动Fabric CA服务

    1。访问https://hub.docker.com/r/hyperledger/fabric-ca/tags/ 获取fabric-ca版本

    2。修改docker-compose.yaml文件

    cd $GOPATH/src/github.com/hyperledger/fabric-ca/docker/server
    
    vi docker-compose.yml

    //docker-compose.yml目录下
    docker-compose up -d
    
    若指定的镜像不存在,则Docker会主动拉取此镜像,然后启动fabric-ca服务实例

    //查看启动的docker服务
    docker ps

    //列出fabric-ca镜像
    docker image ls hyperledger/fabric-ca

    即可查看到TAG=x86_64-1.0.0的镜像

    方法三:通过源码编译生成Docker镜像,以启动Fabric CA服务

    //使用docker-compose编译和启动服务
    cd $GOPATH/src/github.com/hyperledger/fabric-ca
    //编译
    make docker
    
    cd docker/server
    //启动fabric ca服务
    docker-compose-up -d
    
    hyperledger/fabric-ca镜像同时包含Fabric CA的服务端fabric-ca-server和客户端fabric-ca-client

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

    $ fabric-ca-server
    
    $ fabric-ca-server --help
    Hyperledger Fabric Certificate Authority Server
    
    Usage:
      fabric-ca-server [command]
    
    Available Commands:
      init        Initialize the Fabric CA server
      start       Start the Fabric CA server
    
    Flags:
          --address string                         Listening address of Fabric CA server (default "0.0.0.0")
      -b, --boot string                            The user:pass for bootstrap admin which is required to build default config file
          --ca.certfile string                     PEM-encoded CA certificate file (default "ca-cert.pem")
          --ca.chainfile string                    PEM-encoded CA chain file (default "ca-chain.pem")
          --ca.keyfile string                      PEM-encoded CA key file (default "ca-key.pem")
      -n, --ca.name string                         Certificate Authority name
      -c, --config string                          Configuration file (default "fabric-ca-server-config.yaml")
          --csr.cn string                          The common name field of the certificate signing request to a parent Fabric CA server
          --csr.hosts stringSlice                  A list of space-separated host names in a certificate signing request to a parent Fabric CA server
          --csr.serialnumber string                The serial number in a certificate signing request to a parent Fabric CA server
          --db.datasource string                   Data source which is database specific (default "fabric-ca-server.db")
          --db.tls.certfiles stringSlice           PEM-encoded list of trusted certificate files
          --db.tls.client.certfile string          PEM-encoded certificate file when mutual authenticate is enabled
          --db.tls.client.keyfile string           PEM-encoded key file when mutual authentication is enabled
          --db.type string                         Type of database; one of: sqlite3, postgres, mysql (default "sqlite3")
      -d, --debug                                  Enable debug level logging
          --ldap.enabled                           Enable the LDAP client for authentication and attributes
          --ldap.groupfilter string                The LDAP group filter for a single affiliation group (default "(memberUid=%s)")
          --ldap.url string                        LDAP client URL of form ldap://adminDN:adminPassword@host[:port]/base
          --ldap.userfilter string                 The LDAP user filter to use when searching for users (default "(uid=%s)")
      -p, --port int                               Listening port of Fabric CA server (default 7054)
          --registry.maxenrollments int            Maximum number of enrollments; valid if LDAP not enabled
          --tls.certfile string                    PEM-encoded TLS certificate file for server's listening port (default "ca-cert.pem")
          --tls.clientauth.certfiles stringSlice   PEM-encoded list of trusted certificate files
          --tls.clientauth.type string             Policy the server will follow for TLS Client Authentication. (default "noclientcert")
          --tls.enabled                            Enable TLS on the listening port
          --tls.keyfile string                     PEM-encoded TLS key for server's listening port (default "ca-key.pem")
      -u, --url string                             URL of the parent Fabric CA server
    
    
    Use "fabric-ca-server [command] --help" for more information about a command.
    
    CA Server CMD
    View Code

    注:参数类型标记为“stringSlice”的选项,表示可以批量指定多个参数,形如—— "string0 string1 ... stringN" 的形式,此时外层必须有双引号,且各项之间以空格分开;多次分开指定则不需要加双引号,如 -csr.hosts "host1 host2" 与 -csr.hosts host1 -csr.hosts host2 效果相同。

    (五)Fabric CA数据库存储

    Fabric CA默认数据库存储【SQLite】,文件名【fabric-ca-server.db】。若要考虑集群部署,可采用

    【mysql】/【PostgreSQL】数据库

    【SQLite】的数据存储配置:

    1。基于Mysql的数据存储

    相关配置参考:https://dev.mysql.com/doc/refman/5.7/en/identifiers.html

    按【sqlite3】配置。type:mysql  /datasource:mysql连接信息

    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
           certifiles:                          #是PEM编码的可信根证书文件列表
                - db-server-cert.pem
           client:
                certfile:db-client-cert.pem  #PEM编码的证书文件
                keyfile:db-client-key.pem   #PEM编码的密钥文件
    
    ##certfile & keyfile用于fabric ca服务与mysql数据库之间建立安全的连接

    2。基于PostgreSQL(自由的对象-关系型数据库服务器(数据库管理系统))的数据存储

    Fabric CA服务端配置文件参考如下:

    db:
      type:postgres
      datasource:host=localhost port=5432 user=username password=pwd
      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服务器,实现如下功能:

    (1)。用户注册时从LDAP服务器中读取信息进行认证

    (2)。用户鉴权时从LDAP服务器中读取属性信息进行验证

    配置方式:修改Fabric CA服务器配置文件内的LDAP选项。参考:https://github.com/osixia/docker-openldap

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

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

    (2)Fabric CA服务器接收到用户注册请求后,解析出头部的用户名称和注册密码。

           通过在配置文件中设置"userfilter"可以查找用户对应的可识别名称(Distinguished Name,DN)。

           尝试执行LDAP绑定用户的注册密码进行身份验证。

           若绑定成功,则用户注册就被认证通过。

    (六)Fabric CA服务端操作使用

    访问Fabric CA两种方式:【1】Fabric CA客户端工具  【2】RESTful接口

    1。Fabric CA客户端工具

    (1)。Fabric CA客户端命令行选项

    fabric-ca-client
    # fabric-ca-client
    Hyperledger Fabric Certificate Authority Client
    
    Usage:
      fabric-ca-client [command]
    
    Available Commands:
      enroll      Enroll an identity
      getcacert   Get CA certificate chain
      reenroll    Reenroll an identity
      register    Register an identity
      revoke      Revoke an identity
    
    Flags:
      -c, --config string                Configuration file (default "$HOME/.fabric-ca-client/fabric-ca-client-config.yaml")
          --csr.cn string                The common name field of the certificate signing request
          --csr.hosts stringSlice        A list of space-separated host names in a certificate signing request
          --csr.serialnumber string      The serial number in a certificate signing request
      -d, --debug                        Enable debug level logging
          --enrollment.hosts string      Comma-separated host list
          --enrollment.label string      Label to use in HSM operations
          --enrollment.profile string    Name of the signing profile to use in issuing the certificate
          --id.affiliation string        The identity's affiliation
          --id.attr string               Attributes associated with this identity (e.g. hf.Revoker=true)
          --id.maxenrollments int        The maximum number of times the secret can be reused to enroll
          --id.name string               Unique name of the identity
          --id.secret string             The enrollment secret for the identity being registered
          --id.type string               Type of identity being registered (e.g. 'peer, app, user')
      -M, --mspdir string                Membership Service Provider directory (default "msp")
      -m, --myhost string                Hostname to include in the certificate signing request during enrollment (default "$HOSTNAME")
          --tls.certfiles stringSlice    PEM-encoded list of trusted certificate files
          --tls.client.certfile string   PEM-encoded certificate file when mutual authenticate is enabled
          --tls.client.keyfile string    PEM-encoded key file when mutual authentication is enabled
      -u, --url string                   URL of the Fabric CA server (default "http://localhost:7054")
    
    Use "fabric-ca-client [command] --help" for more information about a command.
    
    CA Client CMD
    View Code

    注:参数类型标记为“stringSlice”的选项,表示可以批量指定多个参数,形如—— "string0 string1 ... stringN" 的形式,此时外层必须有双引号,且各项之间以空格分开;多次分开指定则不需要加双引号,如 -csr.hosts "host1 host2" 与 -csr.hosts host1 -csr.hosts host2 效果相同。

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

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

    注册初始化管理员用户步骤如下:

    Step1:在fabric ca服务端配置文件fabric-ca-server-config.yaml中设置客户端CSR(证书签名请求)。里面选项可自定义,只有"csr.cn"必须设置成初始化管理员ID。

    //设置获取注册证书存储目录的环境变量
    export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
    
    //访问运行在本地7054端口的fabric-ca服务端
    fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

    上述命令:
    1。获取注册证书Ecert和对应的私钥
    2。CA证书链和PEM文件存储在环境变量FABRIC_CA_CLIENT_HOME目录下的msp子目录中。

     (3)。登记一个新用户

    注:只有已注册的用户才可以发起登记(Register)请求。

    发起登记请求的用户称为登记员(Registrar).登记用户时需要具有相应权限。

    Fabric CA服务端在接收到登记请求时需要检查:

    A。登记员需要有登记用户的权限。

         登记类型记录在“hf.Registrar.Roles”属性中。若内容保存“peer/user/app”,则登记员可登记peer/app/user类型用户但不能登记orderer类型用户。

    B。登记员只能登记自己归属范围内的用户

         Eg: 登记员归属a.b,可登记a.b.c的用户,不能登记a.c用户。

               若不指定登记用户归属,默认和登记员归属一样。

    C。登记用户属性需要满足以下条件:

    (a)。登记的用户属性需要包含在登记员的用户属性(hf.Registar.Attributes)。目前只支持通配符“*”。

              Eg:a.b.*代表所有以a.b开头的属性名称

    (b)。若登记用户也有hf.Registar.Attritbutes属性,则用户属性需要是登记员用户属性子集。

             Eg: 登记员hf.Registar.Attributes属性值:a.b.*,x.y.z

                  则:登记用户hf.Registar.Attributes属性值可以为:a.b.c,x.y.z  

    //登记员是admin,登记新用户是admin2
    $export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
    $fabric-ca-client register --id.type user --id.name admin2 --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,admin=true:ecert'
    
    //:ecert指admin属性及其值会添加到用户注册证书中,从而用来实现访问控制
    //命令动行后会打印注册密码,用户注册时需要该注册密码

    修改:增加type

    说明:

    在登记用户时可使用“-id.attrs”选项同时指定多个属性。之间由“,”号分隔。

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

    "-id.attrs"可以有多个

    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客户端配置文件:

    下述命令登记用户,会从上面配置文件中读取默认值。包括type/affiliation/attributes

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

    登记Peer节点

    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目录位置
    export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
    
    //根据用户名(peer1)和密码(peer1pw)获取注册证书
    //-M值为peer节点的MSP目录,它保存获取到的注册证书等信息
    fabric-ca-client enroll -u http://peer1:peer1pw@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp

    Orderer节点注册同上。只需要将对应的MSP目录路径修改为orderer对应的msp目录即可。

     

    上述目录:

    cacerts:存储可信的CA根证书  /  signcerts为ca验证签名的证书  / keystore

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

    若注册证书将要过期/私钥泄露,则可调用reenroll命令重新申请新的注册证书

    //设置环境变量peer1目录位置
    export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
    
    //重新获取用户注册证书
    fabric-ca-client reenroll

    (6)。用户注销

    一个身份/证书可以被注销。

    注销身份:则会注销其拥有的所有证书,并阻止其申请新证书。

    注销证书:只是对单个证书进行无效处理。

    格式:fabric-ca-client revoke -e <enrollment_id> -r <reason>

    export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
    
    //注销peer1身份
    fabric-ca-client revoke -e peer1

    也可用API和序列号注销:--未测试成功

    //openssl获取证书API和序列号
    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服务器获取根CA证书
    fabric-ca-client getcacert

     

    【1】启动一个CA2的Fabric CA服务

    //启动一个CA2的Fabric CA服务,监听端口为7055
    export FABRIC_CA_SERVER_HOME=$HOME/ca2
    fabric-ca-server start -b admin:ca2pw -p 7055 -n CA2

    【2】获取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

     

    2。RESTful接口

    Fabric CA提供了多个接口,包括:获取CA信息/获取注册证书/重新获取注册证书/用户登记/用户注销/批量获取交易证书等。

    Fabric CA提供的RESTful接口,可通过http/https访问。

    【1】获取CA信息

    请求类型:GET   /   请求URL:/api/v1/cainfo

    【2】获取注册证书

     请求类型:POST   /   请求URL:/api/v1/enroll

    【3】重新获取注册证书

    请求类型:POST   /   请求URL:/api/v1/reenroll

    【4】用户登记

    请求类型:POST   /   请求URL:/api/v1/register

    【5】用户注销

    请求类型:POST   /   请求URL:/api/v1/revoke

    【6】批量获取交易证书

    请求类型:POST   /   请求URL:/api/v1/tcert

    私密信息管理利器HashiCorp Vault

    HashiCorp Vault简介

    HashiCorp Vault启动和读写

    HashiCorp Vault加密引擎

    HashiCorp Vault验证和授权

    HashiCorp Vault部署

    HashiCort REST API

    HashiCorp Vault:私密信息管理利器  ##用于生成私钥/导入/导出/加解密/签名/验签

     

    博客Fabric CA

    Hyperledger CA

    Fabric CA颁发数字证书

  • 相关阅读:
    使用Maven Helper解决Maven依赖冲突
    bzoj 1037[ZJOI2008]生日聚会Party
    bzoj 1031[JSOI2007]字符加密
    bzoj 1029 [JSOI2007]建筑抢修
    bzoj 1025[SCOI2009]游戏
    bzoj 1027[JSOI2007]合金
    bzoj 1024[SCOI2009]生日快乐
    bzoj 1023[SHOI2008]cactus仙人掌图
    bzoj 1022 [SHOI2008]小约翰的游戏John
    bzoj 1021[SHOI2008]Debt 循环的债务
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9803413.html
Copyright © 2020-2023  润新知