zoukankan      html  css  js  c++  java
  • 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颁发数字证书

  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9803413.html
Copyright © 2011-2022 走看看