精华内容
下载资源
问答
  • fabric CA

    千次阅读 2018-01-17 10:09:33
    Fabric CA为Hyperledger Fabric行使证书机构的功能。Fabric CA提供以下功能:身份注册,或者将连接到LDAP作为用户注册;颁发登录证书(ECerts);颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性;证书续期与...

    Fabric CA为Hyperledger Fabric行使证书机构的功能。

    Fabric CA提供以下功能:

    1. 身份注册,或者将连接到LDAP作为用户注册;
    2. 颁发登录证书(ECerts);
    3. 颁发交易证书(TCerts),保证链上交易的匿名性与不可连接性;
    4. 证书续期与撤销

    Fabric CA 包含一个服务端组件和一个客户端组件

    下图说明了 Fabric CA 服务端如何在 Hyperledger Fabric 架构中发挥作用

    fabric ca源码  https://github.com/hyperledger/fabric-ca

    使用文档  https://hyperledger-fabric-ca.readthedocs.io/en/latest/

    需要安装两个包

    centos     yum install libtool libtool-ltdl-devel

    ubuntu    apt install libtool libltdl-dev

    Fabric CA 提供3种方式来配置 fabric-ca-server 和 fabric-ca-client 。优先级如下:

    1. 命令行参数
    2. 环境变量
    3. 配置文件

    配置优先级由高到低依次为命令行参数 > 环境变量 > 配置文件

    配置文件的修改可以被环境变量或者命令行参数覆盖

    fabric-ca-server 和 fabirc-ca-client 的配置文件里的所有属性都支持相对路径和绝对路径。相对路径是相对于配置目录,即配置文件所在的目录

    实验步骤:

    export FABRIC_CA_SERVER_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-server

    export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-client

    初始化fabric-ca服务端

    fabric-ca-server init -b admin:adminpw

    -b 选项指定了引导身份的用户名和密码

    [root@localhost hyperledger]# ls fabric-ca-server/
    ca-cert.pem  fabric-ca-server-config.yaml  fabric-ca-server.db  msp

    ca-cert.pem是CA中心的根证书,用自己的私钥自签名,证书包含自己的公钥,用于验证其它签名证书的有效性

    fabric-ca-server-config.yaml为CA服务端配置文件

    fabric-ca-server.db是存储注册用户和证书的数据库

    msp/keystore里存放的是CA中心的私钥,用于生成根证书和其它证书

    启动fabric服务端

    fabric-ca-server start -b admin:adminpw

    登陆刚才引导注册的身份,取得登陆用户CA证书

    fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

    [root@localhost hyperledger]# ls fabric-ca-client/
    fabric-ca-client-config.yaml  msp
    fabric-ca-client-config.yaml是CA客户端的配置文件

    msp/cacerts存放的是根证书(与CA服务端根证书相同)

    msp/keystore存放的是登陆用户的私钥

    msp/signcerts存放的是登陆用户的身份证书,证书由CA服务端私钥签名,证书包含了登陆用户的身份信息和公钥

    注册一个新的身份证

    只有已经登录了的身份才能发起注册的请求,而且必须有相应的权限来注册想要注册的身份类型

    fabric-ca-client register --id.name zhaolong--id.type user --id.affiliation org1.department1 --id.attrs hf.Revoker=true

    会显示密码:

    Password: qNRdsGhrPnYE

    密码会被打印出来,登录这个新注册的身份的时候,需要用到这个密码。这允许一个管理员注册身份,然后把这个身份的ID和密码给别人来登陆。

    注册一个节点身份,在这里我们选择指明自己的密码,而不是由服务器生成

    fabric-ca-client register --id.name peer1 --id.type peer --id.affiliation org1.department1 --id.secret peer1pw

    登陆一个节点

    export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-user/peer1

    fabric-ca-client enroll -u http://peer1:peer1pw@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp

    -M选项允许你指定登陆节点CA证书存储在哪

    从另一个Fabric CA服务器获得CA证书链

    下面的命令会在本地启动第二个Fabric CA服务器,监听7055端口,命名为“CA2“。这代表两个由不同成员管理的分开的信任中心。

    export FABRIC_CA_SERVER_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-server2

    fabric-ca-server start -b admin:ca2pw -p 7055 -n CA2

    下面的命令会把CA2的证书链安装进peer1的MSP2目录,也就是取得CA2的根证书

    export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-user/peer1

    fabric-ca-client getcacert -u http://localhost:7055 -M $FABRIC_CA_CLIENT_HOME/msp2

    重新登陆一个身份

    假设你的登陆证书快过期了,你可以重新登陆来替换你的登陆证书(ECert)

    export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-user/peer1

    fabric-ca-client reenroll

    登陆超时时间由expiry字段指定

    撤销一个证书或身份

    身份和证书都能被撤销。撤销一个身份会撤销该身份拥有的所有证书,该身份也不能再获得新的证书。撤销一个证书会使该证书失效。

    为了撤销一个证书或身份,发起者必须有hf.Revoker属性。发起者只能撤销与自己的affiliation相同的证书或身份,或者发起者的affiliation是被撤销者的affiliation的前缀

    撤销peer1的身份

    export FABRIC_CA_CLIENT_HOME=/opt/gopath/src/github.com/hyperledger/fabric-ca-client

    fabric-ca-client revoke -e peer1

    一个身份可以撤销自己的登陆证书(ECert),需要指定ECert的AKI和序列号:

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

    可以通过openssl命令来获取一个证书的AKI和序列号:

    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














    展开全文
  • Fabric CA

    2020-12-19 14:39:56
    1 启动ca容器 组织Org1的CA容器配置 ca_org1: ... - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server - FABRIC_CA_SERVER_CA_NAME=ca-org1 - FABRIC_CA_SERVER_TLS_ENABLED=true - FABRIC_CA_SER

    1 Fabric CA简介

    Fabric网络使用Fabric CA实现遵循PKI的身份证书管理服务。
    Fabric CA主要实现了以下的功能

    • 负责Fabric网络中所有实体的身份管理,注册、撤销等
    • 负责证书管理,包括各种公钥证书的签发和撤销
    • 服务端支持RESTful API,同时支持命令行客户端

    Fabric CA基于CS架构,包括服务器和客户端组件。

    • 服务器实现PKI服务和证书管理功能,支持多种数据库后台,支持负载均衡
    • 客户端提供访问服务器和命令行操作,供用户访问服务器

    1 部署CA服务器

    例如test-network示例中组织Org1的CA服务器容器编排配置,官方DockerHub中的镜像名字为hyperledger/fabric-ca。

      ca_org1:
        image: hyperledger/fabric-ca:$IMAGE_TAG
        environment:
          - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
          - FABRIC_CA_SERVER_CA_NAME=ca-org1
          - FABRIC_CA_SERVER_TLS_ENABLED=true
          - FABRIC_CA_SERVER_PORT=7054
        ports:
          - "7054:7054"
        command: sh -c 'fabric-ca-server start -b admin:adminpw -d'
        volumes:
          - ../organizations/fabric-ca/org1:/etc/hyperledger/fabric-ca-server
        container_name: ca_org1
        networks:
          - test
    
    • environment
      FABRIC_CA_HOME环境变量,将/etc/hyperledger/fabric-ca-server作为工作目录
      FABRIC_CA_SERVER_CA_NAME环境变量,指定CA服务器的名字
      FABRIC_CA_SERVER_TLS_ENABLED环境变量,启动TLS认证
      FABRIC_CA_SERVER_PORT环境变量,指定端口7054
    • ports
      暴露服务端口7054(RESTful服务端口)
    • volumes
      将本地存放配置文件的目录挂载到容器中,方便对证书文件和数据库进行备份
    • command
      初始化启动CA服务fabric-ca-server start -b admin:adminpw -d

    2 启动CA服务器

    fabric-ca-server命令主要用来启动一个CA服务,主要包括init和start两个指令。

    • init指令用于初始化一个fabric-ca-server服务,包括生成密钥相关的证书文件以及配置文件。
    • start指令用于启动一个fabric-ca-server服务,如果之前没有初始化则先执行初始化操作,需要指定-b admin_user:admin_pass参数来启动

    docker容器启动后执行初始化启动ca服务器的命令,-b 选项为管理员提供注册ID和密码。

    fabric-ca-server start -b admin:adminpw -d
    

    成功完成初始化后,生成配置文件fabric-ca-server-config.yaml到配置目录。

    在这里插入图片描述

    • ca-cert.pem PEM格式的根CA证书,自签名
    • fabric-ca-server-config.yaml 默认配置文件
    • fabric-ca-server.db sqlite数据库文件
    • msp/keystore 存放ca和tls签名证书对应的私钥文件(_sk文件)
    • IssuerSecretKey idmix中使用的签发者的公钥
    • IssuerRevocationPrivateKey idmix中使用的已撤销公钥
    • tls-cert.pem tls的根CA证书,自签名

    ca-cert.pem为根CA证书,这个证书可以用来签发中间CA或者Fabric网络中所有实体(组织、节点、用户)的身份证书。
    tls-cert.pem用于tls通信,fabric-ca-client访问CA服务器都需要指定该证书。

    3 fabric-ca-client命令行交互

    通过fabric-ca-client客户端请求org1和CA服务器为org1生成证书的流程。

    function createOrg1() {
    
      infoln "Enroll the CA admin"
      mkdir -p organizations/peerOrganizations/org1.example.com/
    
      export FABRIC_CA_CLIENT_HOME=${PWD}/organizations/peerOrganizations/org1.example.com/
      #  rm -rf $FABRIC_CA_CLIENT_HOME/fabric-ca-client-config.yaml
      #  rm -rf $FABRIC_CA_CLIENT_HOME/msp
    
      set -x
      fabric-ca-client enroll -u https://admin:adminpw@localhost:7054 --caname ca-org1 --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      echo 'NodeOUs:
      Enable: true
      ClientOUIdentifier:
        Certificate: cacerts/localhost-7054-ca-org1.pem
        OrganizationalUnitIdentifier: client
      PeerOUIdentifier:
        Certificate: cacerts/localhost-7054-ca-org1.pem
        OrganizationalUnitIdentifier: peer
      AdminOUIdentifier:
        Certificate: cacerts/localhost-7054-ca-org1.pem
        OrganizationalUnitIdentifier: admin
      OrdererOUIdentifier:
        Certificate: cacerts/localhost-7054-ca-org1.pem
        OrganizationalUnitIdentifier: orderer' >${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml
    
      infoln "Register peer0"
      set -x
      fabric-ca-client register --caname ca-org1 --id.name peer0 --id.secret peer0pw --id.type peer --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      infoln "Register user"
      set -x
      fabric-ca-client register --caname ca-org1 --id.name user1 --id.secret user1pw --id.type client --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      infoln "Register the org admin"
      set -x
      fabric-ca-client register --caname ca-org1 --id.name org1admin --id.secret org1adminpw --id.type admin --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      mkdir -p organizations/peerOrganizations/org1.example.com/peers
      mkdir -p organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com
    
      infoln "Generate the peer0 msp"
      set -x
      fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp --csr.hosts peer0.org1.example.com --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/config.yaml
    
      infoln "Generate the peer0-tls certificates"
      set -x
      fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls --enrollment.profile tls --csr.hosts peer0.org1.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/tlscacerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/signcerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/keystore/* ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
    
      mkdir -p ${PWD}/organizations/peerOrganizations/org1.example.com/msp/tlscacerts
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/tlscacerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/msp/tlscacerts/ca.crt
    
      mkdir -p ${PWD}/organizations/peerOrganizations/org1.example.com/tlsca
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/tlscacerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem
    
      mkdir -p ${PWD}/organizations/peerOrganizations/org1.example.com/ca
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp/cacerts/* ${PWD}/organizations/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem
    
      mkdir -p organizations/peerOrganizations/org1.example.com/users
      mkdir -p organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com
    
      infoln "Generate the user msp"
      set -x
      fabric-ca-client enroll -u https://user1:user1pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp/config.yaml
    
      mkdir -p organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com
    
      infoln "Generate the org admin msp"
      set -x
      fabric-ca-client enroll -u https://org1admin:org1adminpw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
      { set +x; } 2>/dev/null
    
      cp ${PWD}/organizations/peerOrganizations/org1.example.com/msp/config.yaml ${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml
    
    }
    

    3.1 配置读取

    farbic-ca-client同样需要配置文件,环境变量FABRIC_CA_CLIENT_HOME指定了默认配置文件fabric-ca-client-conf.yaml文件。

    3.2 登记用户

    通过enroll命令对注册到fabric-ca-server中实体进行登记,向服务器申请签发ECert证书,采用默认的admin用户进行登记。

     fabric-ca-client enroll -u https://admin:adminpw@localhost:7054 --caname ca-org1 --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    通过查看log执行登记用户生成的文件

    + fabric-ca-client enroll -u https://admin:adminpw@localhost:7054 --caname ca-org1 --tls.certfiles /home/wxudong/go/src/wxudong/fabric-samples/test-network/organizations/fabric-ca/org1/tls-cert.pem
    2020/12/19 10:20:33 [INFO] Created a default configuration file at /home/wxudong/go/src/wxudong/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/fabric-ca-client-config.yaml
    2020/12/19 10:20:33 [INFO] TLS Enabled
    2020/12/19 10:20:33 [INFO] generating key: &{A:ecdsa S:256}
    2020/12/19 10:20:33 [INFO] encoded CSR
    2020/12/19 10:20:33 [INFO] Stored client certificate at /home/wxudong/go/src/wxudong/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/msp/signcerts/cert.pem
    2020/12/19 10:20:33 [INFO] Stored root CA certificate at /home/wxudong/go/src/wxudong/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/msp/cacerts/localhost-7054-ca-org1.pem
    2020/12/19 10:20:33 [INFO] Stored Issuer public key at /home/wxudong/go/src/wxudong/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/msp/IssuerPublicKey
    2020/12/19 10:20:33 [INFO] Stored Issuer revocation public key at /home/wxudong/go/src/wxudong/fabric-samples/test-network/organizations/peerOrganizations/org1.example.com/msp/IssuerRevocationPublicKey
    

    在这里插入图片描述

    • fabric-ca-client-config.yaml 默认配置文件
    • localhost-7054-ca-org1.pem 上述org组织CA服务器的根ca证书
    • cert.pem和_sk文件 由根CA签发的数字证书和私钥,用于标识管理员的身份
    • ca.crt CA服务器生成的用于tls通信的根CA证书

    3.3 注册用户

    register命令用于注册新的成员,执行注册用户的客户端必须已经经过登记认证,拥有足够的权限来进行注册。

     fabric-ca-client register --caname ca-org1 --id.name peer0 --id.secret peer0pw --id.type peer --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    注册peer0的身份,指定id类型为peer。

    fabric-ca-client register --caname ca-org1 --id.name user1 --id.secret user1pw --id.type client --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    注册user1的身份,指定id类型为client。

     fabric-ca-client register --caname ca-org1 --id.name org1admin --id.secret org1adminpw --id.type admin --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    注册org1admin的身份,指定id类型为admin。

    3.4 生成MSP目录

    使用peer0的用户身份去创建peer0的身份证书,保存到MSP目录。

     fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp --csr.hosts peer0.org1.example.com --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    使用peer0的用户身份去创建peer0的tls签名证书,保存到tls目录。

      fabric-ca-client enroll -u https://peer0:peer0pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls --enrollment.profile tls --csr.hosts peer0.org1.example.com --csr.hosts localhost --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    使用user1的用户身份去创建user1的身份签名证书,保存到msp目录。

    fabric-ca-client enroll -u https://user1:user1pw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/User1@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    使用org1admin的用户身份去创建admin的身份签名证书,保存到msp目录。

    fabric-ca-client enroll -u https://org1admin:org1adminpw@localhost:7054 --caname ca-org1 -M ${PWD}/organizations/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp --tls.certfiles ${PWD}/organizations/fabric-ca/org1/tls-cert.pem
    

    在这里插入图片描述

    展开全文
  • fabric ca

    千次阅读 2017-07-04 16:35:54
    fabric-ca
    如果想注册新用户,必须先登陆启动用户
    fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

    登录命令会存储一个登录证书(ECert),相对应的私钥,还有CA证书链PEM文件

    注册一个新的身份

    只有在上面admin用户状态下才能才能发起新用户的注册请求

    export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin

    fabric-ca-client register --id.name admin2 --id.type user --id.affiliation org1.department1 --id.attr hf.Revoker=true

    -------------------------------------------------------------------
    ECerts  1,长期有效(静态登记证书)
                 2,包含所有者的身份/注册ID
                 3,为TCert请求提供名义实体的身份验证
                 4,Enroll阶段产生

    TCerts  1,每个交易的短期证书
                 2,不包含所有者的身份/注册ID·(为了匿名,但是可以配置有注册信息的形式)
                 3,Transaction阶段产生
    ※现阶段还没有Tcert(ibm留下的坑。。。。)

    ECerts包含两个密钥对的公共部分: 一个签名密钥对和一个加密密钥对

    TLS证书(TLS-Certs) TLS-Certs 是用于系统/组件到系统/组件间通讯所使用的证书。
    他们包含所有者的身份信息,使用是为了保证网络基本的安全

    -------------------------------------------------------------------

    证书(TCerts)里包含下面信息(v1.0还不支持)
    1,用户身份
    2,加密用公钥-私钥(签名私钥和验证公钥)
    3,签名用公钥-私钥(加密公钥和解密私钥)
    4,颁发机构

    0.6简化Tcerts设计使用对称密钥加密来提供交易保密性

    -------------------------------------------------------------------

    每个组织都配置了唯一的根证书(ca-cert)
    Hyperledger Fabric中的交易和通信是通过存储在keystore中的实体的私钥签名,然后通过公钥手段进行验证
    MSP文件夹,用来存储每个组织在orderer genesis block中指定的根证书
    Org1的私钥:crypto-config/peerOrganizations/org1.example.com/ca/
    Org2的私钥:crypto-config/peerOrganizations/org2.example.com/ca/

    Hyperledger Fabric中的交易和通信是通过存储在keystore中的实体的私钥签名,然后通过公钥手段进行验证(signcerts)

    --------------------------------------------------------------------------

    orderer和peer需要具备签名的能力。为了做到这一点,节点的管理员在节点启动的时候指定签名Identity的信息。
    这里的MSP实现了签名Identity, 我们称之为SignerMSP。
    创建后,只有节点的管理员可以更新,各个节点可以不同。 
    简单描述,在V1.0中,假设关键一个类型为Fabric的MSP, 管理员需要在节点的指定目录拷贝下面四类文件
    cacerts: PEM格式的MSP的根CA证书
    admincerts: MSP的管理员证书
    keystore: 节点的签名私钥
    signcerts:验证本节点签名的证书(由ca根证书签名生成的证书,证书里面包含该节点私钥对应的公钥)

    https://github.com/yeasy/hyperledger_code_fabric/blob/master/common/tools/cryptogen/main_go.md

    pem文件,它里面的内容可能是certificate也可能是key,也可能两个都有,要看具体情况.

    --------------------------------------------------------------------------------------------
    orderer系统channel中指定的msp,可以定义对channel的访问策略,管理相关成员,
    包括:reader(向channel发获取请求),writer(向channel发送广播请求),
    chainCreator(发送创建链代码请求),admin(可以发送重新配置channel请求)。
    应用链或者channel中指定的msp,可以定义访问策略,管理相关成员:reader, writer,admins, 
    chaincodeAdmin(可以发送链代码实例化请求)。 显然,链内的msp具有签名验证角色,
    与本地msp提供的签名角色相反。更详细的说,peer和orderer需要在channel(orderer 系统channel)
    和chain上下文中 启动msp,来认证交易或者配置相关的请求,具备生成签名的能力。

    ------------------------------------------------------------------------------------------------------------------

    ##管理员身份自认证
    首先,修改配置文件,其中 csr.cn 字段必须与自认证的身份名称相同。
    通过调用监听在本地 7054 端口的服务端,对 ID:admin 与 PWD:adminpw 的管理员身份进行了自认证
    --------
    export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
    fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
    --------
    enroll 命令会将生成的 ECert(enrollment certificate),
    以及对应的私钥及、CA 证书链(PEM 格式)存储在子目录 msp 中,
    命令执行成功后提示这些文件的存储位置

    ------------------------------------------------------------------------------------------------------------------

    一个X.509证书包含了一个公钥,和一个身份标识(一个主机名,或一个组织,或一个个人),
    然后被CA(certificate authority)签名,或者自签名。
    当一个证书被CA签名后,或者其它方式验证后,持有该证书的人,就可以依靠其中包含的公钥,
    来和外界建立安全的通信;或者验证那些通过证书中公钥对应的私钥数字签名后的文档

    ------------------------------------------------------------------------------------------------------------------

    在register时候,下面命令里面的参数-M的意思是,拥有执行register权限用户的MSP路径
    fabric-ca-client register -M admin/msp --id.name user01 --id.type peer --id.affiliation org1.department1 --id.secret user01pw
    在enroll时候,下面命令里面的参数-M的意思是,enroll时发行的key的保存场所
    fabric-ca-client enroll -u http://user01:user01pw@fabric-ca:7054 -M user01/msp
    ------------------------------------------------------------------------------------------------------------------

    docker run 启动cli时,要设定下面关联
    ../crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp:/etc/hyperledger/fabric-ca-client
    环境变量:
    -e FABRIC_CA_CLIENT_TLS_CERTFILES=/etc/hyperledger/fabric-ca-client/ca.org1.example.com-cert.pem   ->ca的root证书
    -e FABRIC_CA_CLIENT_TLS_CLIENT_CERTFILE=/etc/hyperledger/fabric-ca-client/signcerts/Admin@org1.example.com-cert.pem  ->包含公钥
    -e FABRIC_CA_CLIENT_TLS_CLIENT_KEYFILE=/etc/hyperledger/fabric-ca-client/keystore/XXXXXX_sk    ->私钥         

    启动ca服务器的时候,下面的参数,如果只设定其中一个,会出现[Public key and private key do not match]异常

    FABRIC_CA_SERVER_CA_KEYFILE设置的是私有key
    FABRIC_CA_SERVER_CA_CERTFILE设置认证证书,其里面还包含了公有key

    ------------------------------------------------------------------------------------------------------------------

    在一个父ca服务里面可以启动多个子ca,通过设定fabric-ca-server-config.yaml有两种方法。

    第一种是设定cacount,比如[cacount:2],代表启动2个子ca.
    子ca的配置,是根据默认ca配置来设定。
    在这种模式下,父ca的启动参数里面不能设置[FABRIC_CA_SERVER_CA_KEYFILE,FABRIC_CA_SERVER_CA_CERTFILE]
    这两个参数,因为子ca创建完成后,会把子ca的证书和父ca的csr部分进行对比,如果一样的话,会报异常。

    第二种是设定cafiles,内容如下。在启动父ca的时候,把外部ca配置文件需要挂载到父ca容器里面.
    另外要注意的是,这两个子ca配置文件中csr.cn要设置不同的值,以便于父ca识别。
    cafiles:
          - ca/ca1/fabric-ca-server-config.yaml
          - ca/ca2/fabric-ca-server-config.yaml

    以上的方法实质上共启动了3个ca服务,一个父带两个子。
    在调用的时候需要指定--caname这个参数,如下
    fabric-ca-client enroll -u http://admin:adminpw@ca-server:7054 -M admin/msp --caname subca01
    fabric-ca-client register -M admin/msp --caname subca01 --id.name tom --id.type orderer --id.affiliation org1.department1 --id.secret tomPW

    父CA的所属情报会保存到子CA的表affiliations中。
    子CA的root证书和私有key会根据cafiles设定的config文件内容生成,如下

    /etc/hyperledger/fabric-ca-server/ca/ca01.ca-cert.pem
    /etc/hyperledger/fabric-ca-server/ca/ca01/msp/keystore/fasdfadsfafdasdxxxxx_sk

    从上面可以看出,如果父ca启动的时候,不指定在generateArtifacts.sh生成的初期key的话,可以根据配置文件自己生成新的初始key

    关于fabric-ca-server-config配置文件
    bccsp区域,用来生成私有key
    csr区域,用来生成CA证明书的请求书
    signing区域,根据(CA证明书的请求书)生成CA证明书

    -------------------------------------------------------------------------------------------------------------------

    一个关于数字签名的说明

    http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

    -------------------------------------------------------------------------------------------------------------------

    一个关于ca链的说明

    http://www.cnblogs.com/midfielder/p/7173121.html

    --------------------------------------------------------------------------------------------------------------------

    参考网站

    http://www.cnblogs.com/hadex/p/6825264.html

    --------------------------------------------------------------------------------------------------------------------

    复数ca,中间ca的生成参照

    http://www.cnblogs.com/midfielder/p/7173121.html

    展开全文
  • Fabric系列 - Fabric CA

    2020-08-31 14:34:23
    Fabric CA项目原来是超级账本Fabric内的MemberService组件,负责对网络内各个实体的身份证书进行管理。鉴于其功能十分重要,2017年2月正式成立Fabric CA独立子项目,负责相关代码的维护。Fabric CA项目主要实现了...

    背景

    Fabric CA项目原来是超级账本Fabric内的MemberService组件,负责对网络内各个实体的身份证书进行管理。鉴于其功能十分重要,2017年2月正式成立Fabric CA独立子项目,负责相关代码的维护。Fabric CA项目主要实现了如下几个功能:

    • 负责Fabric网络内所有实体(Identity)的身份管理,包括身份的注册、注销等;
    • 负责证书管理,包括ECerts(身份证书)、TCerts(交易证书)等的发放和注销;
    • 服务端支持基于客户端命令行和RESTful API的交互方式。

    在实现上,Fabric CA基于开源的CFSSL项目框架。代码同时托管在https://gerrit.hyperledger.org 和 https://github.com/hyperledger/fabric-ca (只读镜像)上。

    CFSSl是Cloudf lare开源的提供PKI和TLS证书相关实现的工具集,项目地址为https://github.com/cloudflare/cfssl。

    OpenSSL 和 CFSSL

    OpenSSL是开源的SSL(Secure Sockets Layer)实现,SSL 是一个安全协议,为基于 TCP 的应用层提供安全链接,其目标是保证两个应用间通信的保密性和可靠性

    CFSSL 是 CloudFlare 公司的一个 PKI 工具包,提供了命令行工具和一个 HTTP API 服务器用于签名、验证和捆绑 SSL 证书

    架构

    Fabric CA采用了典型的CS(Client-Server)架构,目前包含两个基本组件,分别实现服务端功能和客户端功能。

    • 服务端(Server):fabric-ca-server实现核心的PKI服务功能,支持多种数据库后台(包括MySql、PostgreSQL等),并支持集成LDAP作为用户注册管理功能;
    • 客户端(Client):fabric-ca-client封装了服务端的RESTful API,提供访问服务端的命令,供用户与服务端进行交互。

    通常情况下,用户通过客户端从Fabric CA服务端获取合法的证书文件后,即可参与到Fabric网络中发起交易。处理交易过程中,无需实时依赖Fabric CA的在线。同时,服务端本身是个可扩展的Web服务,可以很容易地采用集群部署的方式进行负载均衡,同时提高可靠性。

    证书管理

    Fabric网络中,CA负责证书的管理。用户虽然可以通过cryptogen工具提前分配好各组织的身份证书,但对于加入到网络中的用户,以及未来支持的交易证书,都需要Fabric CA来进行统一管理。

    Fabric CA占据网络中安全和隐私的最核心位置,因此需要加强安全方面的防护。CA不应该暴露在公共网络域中,并且只能由有限个具备权限的用户访问。

    另外,根证书往往要进行离线保护处理,减少接触和泄露的可能性。通常使用中间层证书来完成实体证书的签发。同时,绝对不能直接用根证书作为组织管理员的身份证书。

    展开全文
  • Fabric CA 1.0 Alpha小结

    2021-01-08 07:07:45
    1. 整体概览在Fabric 1.0版本中,原0.6版本中的“Membership Service”已经被“Fabric CA”所替代。Fabric CA是Hyperledger Fabric的证书颁发机构,它提供的功能如下:1)身份的注册,或连接到LDAP作为用户注册表;2...
  • Hyperledger Fabric CA中文文档

    千次阅读 2020-06-09 16:38:34
    Fabric CA
  • Fabric CA 总结

    千次阅读 2017-03-06 16:00:59
    Fabric CA是Hyperledger Fabric的证书颁发机构,它提供的功能如下: 1)身份的注册,或连接到LDAP作为用户注册表; 2)发放注册证书(ECerts); 3)发布交易证书(TCerts),在Hyperledger Fabric blockchain上...
  • 本人参考此书,记录Fabric Ca 环境搭建过程 前提:已安装docker环境配置  安装Docker  Fabric网络目前依赖 Docker服务作为链码容器的支持,因此即使是本地环境运行Fabric网络,也需要在Peer节点上安装 Docker...
  • 链接:Fabric CA中文文档 目录 概述 Fabric CA概述 快速上手 安装前提条件 安装软件 使用Fabric CA命令行 配置软件 Fabric CA 服务器 初始化服务器 启动服务器 配置数据库 配置LDAP 搭建集群 搭建多个CA ...
  • ChainDesk:认识Fabric CA

    2019-01-02 15:39:20
    作者:ChainDesk韩小东 本篇文章阅读时间:2分钟   目标 了解 Fabric CA 结构及在 Hyperledger Fabric ...Hyperledger Fabric CA 是 Hyperledger Fabric 的证书颁发机构(CA),是超级账本 Hyperledger Fabri...
  • Fabric CA的基础知识

    千次阅读 2018-06-21 20:01:53
    一:简介 在e2e_cli的例子中,所有用到的证书和私钥都是由cryptogen这个工具根据crypto-config.yaml而生成的。但是在实际的生产环境中,我们需要给每个...Fabric CA的整体结构如下所示: 从图中可以知道:和ca serve...
  • Fabric CA的部署与使用

    千次阅读 2018-05-07 12:07:25
    Fabric CA是Hyperledger Fbric的证书认证中心,提供以下功能:用户信息的登记与注册,数字证书的颁发与管理。 前言 之前使用CA服务一直是在docker容器中运行下载好的CA镜像,在应用程序中通过Node SDK中集成的...
  • Fabric CA 用户指南

    万次阅读 2017-07-28 15:04:47
    Fabric CA 用户指南 证书颁发机构 提供的功能如下: 身份的注册 :或连接到LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)作为用户注册表; 签发登记证书(ECerts)(Enrollment Certificates) ...
  • Fabric CA 官方用户指南(中文版)

    万次阅读 多人点赞 2018-05-20 23:25:27
    一、Fabric CA概述 ​二、开始使用 (一)先决条件 (二)安装Fabric-ca (三)启动服务方式 三、Fabric CA Server (一)初始化Server (二)启动Server (三)配置数据库 1. PostgreSQL 2. MySQL (四...
  • 下载可执行文件 FabricCAserver和CAclient执行文件可以从...在你通过使用执行文件掌握了CA的部署和运行后,你可能很希望使用FabricCA的docker镜像,例如在Kubernetes或Docker部署中。不过本文介绍如何正确使用二进...
  • Fabric CA环境的集成

    2020-06-21 17:19:26
    同样疫情期间的学习Fabric,参考网上大神文章一步步走。 为了方便复习做下笔记啦 ...下面我们就试着讲Fabric CA集成到整个Fabric网络中,并用CA Client生成新用户,最终使用新用户调用ChainCode,验证新用户的合法性。.
  • Fabric CA 官方用户指南

    千次阅读 2018-07-10 11:28:29
    一、Fabric CA概述图1.1 fabric-ca架构图Fabric Server端由一个服务器集群组成,以树形架构组织CA Server节点,包含一个Root 节点和多个中间节点。每个CA要么是根CA,要么是中间CA。每个中间CA都有一个父CA,它要么...
  • 1.认识 Fabric CA 服务器端主目录路径 2.启动 Fabric CA 的方式 任务实现 6.3.1 初始化 Fabric CA 服务器的主目录确定如下: 如果设置了-home 命令行选项,则使用其值 否则,如果FABRIC_CA_SERVER_HOME设置了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,240
精华内容 3,296
关键字:

fabric的ca