zoukankan      html  css  js  c++  java
  • 【区块链】Fabric CA源码和镜像编译

    原文网址:https://blog.csdn.net/zhayujie5200/article/details/80221361

    前言

    • 之前使用CA服务一直是在docker容器中运行下载好的CA镜像,在应用程序中通过Node SDK中集成的接口来访问CA服务器,这次尝试手动部署CA服务;

    • Fabric CA由服务端和客户端组件组成,CA服务端(fabric-ca-server)可以看作一个web服务,执行了Go代码编译生成的二进制文件后,会监听一个端口,处理收到的请求;

    • CA客户端(fabric-ca-client)其实就是一个向CA服务端发送请求的程序,执行编译成的二进制文件并带上不同参数,可以向CA服务器发送相应的http请求,完成一系列操作。

    准备工作

    • 安装Go语言并配置好GOPATH环境变量,下载并配置docker

    • 安装libtoollibtdhl-dev

      sudo apt install libtool libltdl-dev

    通过命令行安装和启动CA

    • 直接从github下载并编译

      go get -u github.com/hyperledger/fabric-ca/cmd/fabric-ca-server
      go get -u github.com/hyperledger/fabric-ca/cmd/fabric-ca-client
    • go get命令会自动获取源码并编译至$GOPATH/bin,我的目录是~/go/bin,目录下出现编译好的二进制可执行文件fabric-ca-serverfabric-ca-client

      接着初始化和启动fabric-ca-server,需要设置一个管理员用户的名称和密码

      fabric-ca-server init -b admin:adminpw                 
      fabric-ca-server start -b admin:adminpw
    • 在这里报错了panic: Version is not set for fabric-ca library,可能与下载的v1.1版本的fabric-ca有关系。

    手动编译生成 

    • 既然直接从github下载的版本出现错误,可以选择自己去编译生成指定版本的fabric-ca-server。 
      首先下载fabric-ca源码并切换至相应版本:

      git clone https://github.com/hyperledger/fabric-ca.git
    • 然后在fabric-ca目录下进行编译

      make fabric-ca-server
      make fabric-ca-client

    cd /home/admin/gocode/src/github.com/hyperledger/fabric-ca/bin

    会在.../fabric-ca/bin目录下生成fabric-ca-serverfabric-ca-client

    接着进入bin目录对CA服务端进行初始化:

    fabric-ca-server init -b admin:adminpw  

    初始化后在目录下生成

    • msp :包含keystore,CA服务器的私钥
    • ca-cert.pem :CA服务端的证书
    • fabric-ca-server.db :CA默认使用的嵌入型数据库 SQLite
    • fabric-ca-server-config.yaml :CA服务端的配置文件

    接着启动CA服务器

    fabric-ca-server start -b admin:adminpw     

    CA server开始监听,默认监听地址为http://0.0.0.0:7054。如果直接执行start命令则会自动先进行初始化init然后启动服务开始监听。

    通过docker镜像安装和启动CA

    docker镜像中同时包含了fabric-ca-serverfabric-ca-client

    • 直接下载fabric-ca镜像 
      首先可以选择从Docker Hub直接下载fabric-ca镜像:

      docker pull hyperledger/fabric-ca:x86_64-1.1.0
    • 利用docker-compose.yml文件来启动镜像,配置文件在.../fabric-ca/docker/server中,进入该目录后启动:

      docker-compose up
    • 即可启动ca容器,如果镜像不存在还会主动拉取镜像,在.../server/fabric-ca-server目录中会生成上述的配置文件(这是利用docker-compose.yml文件设置的映射),证书私钥,数据库文件等,并且开始监听一个端口。

    • 手动编译docker镜像 
      除了直接从Docker Hub拉取fabric-ca镜像,还可以通过源码编译生成镜像。 
      fabric-ca目录下执行:

      make docker
    • 会生成四个镜像fabric-cafabric-ca-toolfabric-ca-peer ,fabric-ca-orderer,镜像保存在.../fabric-ca/build/image中,之后和上面的方法相同根据docker-compose.yml文件启动ca节点。

    Fabric CA的使用

    访问Fabric CA服务端的方法有两种:通过客户端工具(fabric-ca-client)和RESTful接口。本质上,客户端工具也是调用服务端的RESTful接口实现的。这里采用客户端工具的方法来进行访问。

    首先按照上述步骤初始化和启动CA服务器(执行fabric-ca-server或启动CA容器),如果已经下载fabric-ca-client,那移动到相应目录下即可开始操作(若已添加至环境变量则不用)。

    如果是以docker容器方式运行CA服务器且未下载客户端工具,可以进入容器内部进行测试(ca镜像集成了服务端和客户端组件),二进制文件放在/usr/local/bin且已经添加环境变量,进入方法为:

    docker exec -it fabric-ca-server bash

    这里选择运行编译好的可执行文件的方法,首先在一个终端下启动CA服务器

    fabric-ca-server start -b admin:adminpw

    另一个终端操作CA客户端。首先需要注册(enroll)启动时设置的管理员用户, 注册前需要设置证书存储目录的环境变量:

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

    可以发现~/ca目录下生成了一个fabric-ca-client-config.yaml配置文件,以及msp目录,包含管理员的证书和私钥。

    有了已经enroll成功的admin用户,接下来将admin作为登记员(Registrar)来登记(register)一个新用户:

    fabric-ca-client register --id.name Jim --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'

    [root@localhost admin]# fabric-ca-client register --id.name Jim --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'
    2018/06/14 07:24:45 [INFO] Configuration file location: /root/ca/fabric-ca-client-config.yaml
    Password: iQEoXaLRWmNL

    客户端可以接收到一个密码,用这个注册密码来注册(enroll)用户:

    fabric-ca-client enroll -u http://Jim:iQEoXaLRWmNL@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/Jim

    这样一个新用户就注册成功了,获取了属于自己的证书和私钥。

    总结

    总结一下,手动部署CA服务可以分为两类方法:

    • 一种方法是在命令行直接运行编译过后的可执行文件,可以通过go get命令自动获取并编译(最新版本有报错),也可以手动获取源码,切换版本后再进行编译; 然后在命令行中初始化和启动CA服务器;

    • 另一种方法是在容器中运行docker镜像,镜像中包含编译好的可执行文件,镜像可以从Docker Hub直接下载,也可以在fabric-ca目录下利用make docker手动编译,然后利用docker-compose启动CA容器。

    最后查看相关文件内容或者树结构

    cd /home/admin/gocode/src/github.com/hyperledger/fabric-ca/bin

     1 [root@localhost bin]# tree -F
     2 .
     3 ├── ca-cert.pem
     4 ├── fabric-ca-client*
     5 ├── fabric-ca-server*
     6 ├── fabric-ca-server-config.yaml
     7 ├── fabric-ca-server.db
     8 └── msp/
     9     └── keystore/
    10         └── 73c8509d3f8b33d60ba9825a0ddeb10dc6a12fb22fc8912c7661e7a639baac0c_sk*
    11 
    12 2 directories, 6 files

    gedit  fabric-ca-server-config.yaml

    # Version of config file
    version: 1.1.1-snapshot-e656889
    # Server's listening port (default: 7054)
    port: 7054
    # Enables debug logging (default: false)
    debug: false
    # Size limit of an acceptable CRL in bytes (default: 512000)
    crlsizelimit: 512000
    tls:
      # Enable TLS (default: false)
      enabled: false
      # TLS for the server's listening port
      certfile:
      keyfile:
      clientauth:
        type: noclientcert
        certfiles:
    ca:
      # Name of this CA
      name:
      # Key file (is only used to import a private key into BCCSP)
      keyfile:
      # Certificate file (default: ca-cert.pem)
      certfile:
      # Chain file
      chainfile:
    crl:
      # Specifies expiration for the generated CRL. The number of hours
      # specified by this property is added to the UTC time, the resulting time
      # is used to set the 'Next Update' date of the CRL.
      expiry: 24h
    registry:
      # Maximum number of times a password/secret can be reused for enrollment
      # (default: -1, which means there is no limit)
      maxenrollments: -1
      # Contains identity information which is used when LDAP is disabled
      identities:
         - name: admin
           pass: adminpw
           type: client
           affiliation: ""
           attrs:
              hf.Registrar.Roles: "peer,orderer,client,user"
              hf.Registrar.DelegateRoles: "peer,orderer,client,user"
              hf.Revoker: true
              hf.IntermediateCA: true
              hf.GenCRL: true
              hf.Registrar.Attributes: "*"
              hf.AffiliationMgr: true
    db:
      type: sqlite3
      datasource: fabric-ca-server.db
      tls:
          enabled: false
          certfiles:
          client:
            certfile:
            keyfile:
    ldap:
       # Enables or disables the LDAP client (default: false)
       # If this is set to true, the "registry" section is ignored.
       enabled: false
       # The URL of the LDAP server
       url: ldap://<adminDN>:<adminPassword>@<host>:<port>/<base>
       # TLS configuration for the client connection to the LDAP server
       tls:
          certfiles:
          client:
             certfile:
             keyfile:
       # Attribute related configuration for mapping from LDAP entries to Fabric CA attributes
       attribute:
          # 'names' is an array of strings containing the LDAP attribute names which are
          # requested from the LDAP server for an LDAP identity's entry
          names: ['uid','member']
          converters:
             - name:
               value:
          maps:
             groups:
                - name:
                  value:
    affiliations:
       org1:
          - department1
          - department2
       org2:
          - department1
    signing:
        default:
          usage:
            - digital signature
          expiry: 8760h
        profiles:
          ca:
             usage:
               - cert sign
               - crl sign
             expiry: 43800h
             caconstraint:
               isca: true
               maxpathlen: 0
          tls:
             usage:
                - signing
                - key encipherment
                - server auth
                - client auth
                - key agreement
             expiry: 8760h
    csr:
       cn: fabric-ca-server
       names:
          - C: US
            ST: "North Carolina"
            L:
            O: Hyperledger
            OU: Fabric
       hosts:
         - localhost.localdomain
         - localhost
       ca:
          expiry: 131400h
          pathlength: 1
    bccsp:
        default: SW
        sw:
            hash: SHA2
            security: 256
            filekeystore:
                # The directory used for the software file-based keystore
                keystore: msp/keystore
    cacount:
    cafiles:
    intermediate:
      parentserver:
        url:
        caname:
      enrollment:
        hosts:
        profile:
        label:
      tls:
        certfiles:
        client:
          certfile:
          keyfile:

    tree -L 1 fabric-ca

     1 ├── api
     2 ├── bin
     3 ├── CHANGELOG.md
     4 ├── ci.properties
     5 ├── cmd
     6 ├── CODE_OF_CONDUCT.md
     7 ├── CONTRIBUTING.md
     8 ├── docker
     9 ├── docker-env.mk
    10 ├── docs
    11 ├── images
    12 ├── lib
    13 ├── LICENSE
    14 ├── MAINTAINERS.md
    15 ├── Makefile
    16 ├── README.md
    17 ├── release_notes
    18 ├── scripts
    19 ├── swagger
    20 ├── test
    21 ├── testdata
    22 ├── util
    23 └── vendor
    fabric-ca-server-config.yaml 
      1 # Version of config file
      2 version: 1.1.1-snapshot-e656889
      3 
      4 # Server's listening port (default: 7054)
      5 port: 7054
      6 
      7 # Enables debug logging (default: false)
      8 debug: false
      9 
     10 # Size limit of an acceptable CRL in bytes (default: 512000)
     11 crlsizelimit: 512000
     12 
     13 tls:
     14   # Enable TLS (default: false)
     15   enabled: false
     16   # TLS for the server's listening port
     17   certfile:
     18   keyfile:
     19   clientauth:
     20     type: noclientcert
     21     certfiles:
     22 
     23 ca:
     24   # Name of this CA
     25   name:
     26   # Key file (is only used to import a private key into BCCSP)
     27   keyfile:
     28   # Certificate file (default: ca-cert.pem)
     29   certfile:
     30   # Chain file
     31   chainfile:
     32 
     33 
     34 crl:
     35   expiry: 24h
     36 
     37 
     38 registry:
     39   # Maximum number of times a password/secret can be reused for enrollment
     40   # (default: -1, which means there is no limit)
     41   maxenrollments: -1
     42 
     43   # Contains identity information which is used when LDAP is disabled
     44   identities:
     45      - name: admin
     46        pass: adminpw
     47        type: client
     48        affiliation: ""
     49        attrs:
     50           hf.Registrar.Roles: "peer,orderer,client,user"
     51           hf.Registrar.DelegateRoles: "peer,orderer,client,user"
     52           hf.Revoker: true
     53           hf.IntermediateCA: true
     54           hf.GenCRL: true
     55           hf.Registrar.Attributes: "*"
     56           hf.AffiliationMgr: true
     57 
     58 
     59 db:
     60   type: sqlite3
     61   datasource: fabric-ca-server.db
     62   tls:
     63       enabled: false
     64       certfiles:
     65       client:
     66         certfile:
     67         keyfile:
     68 
     69 
     70 ldap:
     71    # Enables or disables the LDAP client (default: false)
     72    # If this is set to true, the "registry" section is ignored.
     73    enabled: false
     74    # The URL of the LDAP server
     75    url: ldap://<adminDN>:<adminPassword>@<host>:<port>/<base>
     76    # TLS configuration for the client connection to the LDAP server
     77    tls:
     78       certfiles:
     79       client:
     80          certfile:
     81          keyfile:
     82    # Attribute related configuration for mapping from LDAP entries to Fabric CA attributes
     83    attribute:
     84       names: ['uid','member']
     85       converters:
     86          - name:
     87            value:
     88       maps:
     89          groups:
     90             - name:
     91               value:
     92 affiliations:
     93    org1:
     94       - department1
     95       - department2
     96    org2:
     97       - department1
     98 signing:
     99     default:
    100       usage:
    101         - digital signature
    102       expiry: 8760h
    103     profiles:
    104       ca:
    105          usage:
    106            - cert sign
    107            - crl sign
    108          expiry: 43800h
    109          caconstraint:
    110            isca: true
    111            maxpathlen: 0
    112       tls:
    113          usage:
    114             - signing
    115             - key encipherment
    116             - server auth
    117             - client auth
    118             - key agreement
    119          expiry: 8760h
    120 csr:
    121    cn: fabric-ca-server
    122    names:
    123       - C: US
    124         ST: "North Carolina"
    125         L:
    126         O: Hyperledger
    127         OU: Fabric
    128    hosts:
    129      - localhost.localdomain
    130      - localhost
    131    ca:
    132       expiry: 131400h
    133       pathlength: 1
    134 bccsp:
    135     default: SW
    136     sw:
    137         hash: SHA2
    138         security: 256
    139         filekeystore:
    140             # The directory used for the software file-based keystore
    141             keystore: msp/keystore
    142 cacount:
    143 cafiles:
    144
    145 intermediate:
    146   parentserver:
    147     url:
    148     caname:
    149 
    150   enrollment:
    151     hosts:
    152     profile:
    153     label:
    154   tls:
    155     certfiles:
    156     client:
    157       certfile:
    158       keyfile:
     
    笔记,万变不离。
  • 相关阅读:
    9.Vue技术栈开发实战-使用Mock模拟Ajax请求
    8.Vue技术栈开发实战-Ajax请求实战
    7.Vue技术栈开发实战-状态管理Vuex进阶
    6.Vue技术栈开发实战-状态管理Vuex(二)
    5.Vue技术栈开发实战-状态管理Vuex(一)
    4.Vue技术栈开发实战-状态管理bus的使用
    3.Vue技术栈开发实战-路由进阶篇
    2.Vue技术栈开发实战-路由基础篇
    Vue技术栈开发实战_汇总贴
    1.Vue技术栈开发实战-使用vue-cli3创建项目
  • 原文地址:https://www.cnblogs.com/ycx95/p/9180625.html
Copyright © 2011-2022 走看看