Hyperledger:Fabric CA 用戶指南 [譯]


Fabric CA 用戶指南

Fabric CA 是 Hyperledger Fabric 的官方配套認證設施。

原文鏈接:http://hyperledger-fabric.readthedocs.io/en/latest/Setup/ca-setup.html

它提供的功能有:

    1. 身份認證,或者從 LDAP 中獲取注冊信息;
    2. 發行擔保證書 ECerts (Enrollment Certificates);
    3. 發行交易證書 TCerts (Transaction Certificates),保障 Hyperledger Fabric 區域鏈交易平台上的信息匿名性和不可追蹤性;
    4. 證書更新和撤銷。

Fabric CA 屬於典型的 CS (Client and Server) 架構,官方代碼庫:https://github.com/hyperledger/fabric-ca 。

本文目錄

    1. 概述
    2. 入門
      1. 運行環境要求
      2. 安裝
      3. Fabric CA 終端命令概覽
    3. 配置文件格式
      1. 服務端配置文件格式
      2. 客戶端配置文件格式
    4. 配置信息的優先級
    5. Fabric CA 服務端
      1. 服務端初始化
      2. 啟動服務端
      3. 配置數據庫
      4. 配置LDAP
      5. 配置集群
    6. Fabric CA 客戶端
      1. 注冊管理員賬戶
      2. 登記信息
      3. 擔保背書(發放證書)
      4. 重新背書(更新證書)
      5. 撤銷證書與清除注冊信息
      6. 啟用 TLS
    7. 附錄 

概述

開篇的圖示展現了 Fabric CA 服務端是如何參與到 Hyperledger Fabric 整體架構中去的。 

與 Fabric CA 服務端交互的方式有如下兩種:

    1. 通過 Fabric CA 客戶端
    2. 使用某種 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)集群,以確保證書和身份的一致性。

入門

運行環境要求

    • Go 語言 1.7 及以上版本
    • 已正確設置 GOPATH 環境變量
    • 已安裝 libtool 與 libtdhl-dev 包(更多信息請參看:https://www.gnu.org/software/libtool/)

安裝

如下所示,將安裝 fabric-ca-server 與 fabric-ca-client 兩個終端命令行工具。

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

啟動服務端:本地環境

如下所示,將按默認配置啟動 Fabric CA 服務端,-b 選項用於指定管理員的賬號與密碼。

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

默認將在當前目錄創建一個名為 fabric-ca-server-config.yaml 的配置文件,該文件的存儲位置也可以另行指定。

啟動服務端:Docker 環境

也可以選擇在 Docker 環境下運行服務端,如下將創建並通過 docker-compose 啟動服務端

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

名為 hyperledger/fabric-ca 的 docker 鏡像中包含了 fabric-ca-server 與 fabric-ca-client 命令行工具。 

Fabric CA 終端命令概覽

fabric-ca-server 命令用法:

 1 Hyperledger Fabric Certificate Authority Server
 2 
 3 Usage:
 4   fabric-ca-server [command]
 5 
 6 Available Commands:
 7   init        Initialize the Fabric CA server
 8   start       Start the Fabric CA server
 9 
10 Flags:
11       --address string                         Listening address of Fabric CA server (default "0.0.0.0")
12   -b, --boot string                            The user:pass for bootstrap admin which is required to build default config file
13       --ca.certfile string                     PEM-encoded CA certificate file (default "ca-cert.pem")
14       --ca.chainfile string                    PEM-encoded CA chain file (default "ca-chain.pem")
15       --ca.keyfile string                      PEM-encoded CA key file (default "ca-key.pem")
16   -n, --ca.name string                         Certificate Authority name
17   -c, --config string                          Configuration file (default "fabric-ca-server-config.yaml")
18       --csr.cn string                          The common name field of the certificate signing request to a parent Fabric CA server
19       --csr.hosts stringSlice                  A list of space-separated host names in a certificate signing request to a parent Fabric CA server
20       --csr.serialnumber string                The serial number in a certificate signing request to a parent Fabric CA server
21       --db.datasource string                   Data source which is database specific (default "fabric-ca-server.db")
22       --db.tls.certfiles stringSlice           PEM-encoded list of trusted certificate files
23       --db.tls.client.certfile string          PEM-encoded certificate file when mutual authenticate is enabled
24       --db.tls.client.keyfile string           PEM-encoded key file when mutual authentication is enabled
25       --db.type string                         Type of database; one of: sqlite3, postgres, mysql (default "sqlite3")
26   -d, --debug                                  Enable debug level logging
27       --ldap.enabled                           Enable the LDAP client for authentication and attributes
28       --ldap.groupfilter string                The LDAP group filter for a single affiliation group (default "(memberUid=%s)")
29       --ldap.url string                        LDAP client URL of form ldap://adminDN:adminPassword@host[:port]/base
30       --ldap.userfilter string                 The LDAP user filter to use when searching for users (default "(uid=%s)")
31   -p, --port int                               Listening port of Fabric CA server (default 7054)
32       --registry.maxenrollments int            Maximum number of enrollments; valid if LDAP not enabled
33       --tls.certfile string                    PEM-encoded TLS certificate file for server's listening port (default "ca-cert.pem")
34       --tls.clientauth.certfiles stringSlice   PEM-encoded list of trusted certificate files
35       --tls.clientauth.type string             Policy the server will follow for TLS Client Authentication. (default "noclientcert")
36       --tls.enabled                            Enable TLS on the listening port
37       --tls.keyfile string                     PEM-encoded TLS key for server's listening port (default "ca-key.pem")
38   -u, --url string                             URL of the parent Fabric CA server
39 
40 
41 Use "fabric-ca-server [command] --help" for more information about a command.
CA Server CMD

fabric-ca-client 命令用法:

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

 注:參數類型標記為“stringSlice”的選項,表示可以批量指定多個參數,形如—— "string0 string1 ... stringN" 的形式,此時外層必須有雙引號,且各項之間以空格分開;多次分開指定則不需要加雙引號,如 -csr.hosts "host1 host2" 與 -csr.hosts host1 -csr.hosts host2 效果相同。

配置文件格式

服務端配置文件格式

服務端啟動時,可以通過 -c 或 --config 選項指定配置文件,若目標文件不存在,將在指定路徑創建一個默認配置文件(若不提供 -c 或 --config 選項,則在服務端的家目錄下創建),內容類似如下:

  1 # Server's listening port (default: 7054)
  2 port: 7054
  3 
  4 # Enables debug logging (default: false)
  5 debug: false
  6 
  7 #############################################################################
  8 #  TLS section for the server's listening port
  9 #############################################################################
 10 tls:
 11   # Enable TLS (default: false)
 12   enabled: false
 13   certfile: ca-cert.pem
 14   keyfile: ca-key.pem
 15 
 16 #############################################################################
 17 #  The CA section contains the key and certificate files used when
 18 #  issuing enrollment certificates (ECerts) and transaction
 19 #  certificates (TCerts).
 20 #############################################################################
 21 ca:
 22   # Certificate file (default: ca-cert.pem)
 23   certfile: ca-cert.pem
 24   # Key file (default: ca-key.pem)
 25   keyfile: ca-key.pem
 26 
 27 #############################################################################
 28 #  The registry section controls how the Fabric CA server does two things:
 29 #  1) authenticates enrollment requests which contain identity name and
 30 #     password (also known as enrollment ID and secret).
 31 #  2) once authenticated, retrieves the identity's attribute names and
 32 #     values which the Fabric CA server optionally puts into TCerts
 33 #     which it issues for transacting on the Hyperledger Fabric blockchain.
 34 #     These attributes are useful for making access control decisions in
 35 #     chaincode.
 36 #  There are two main configuration options:
 37 #  1) The Fabric CA server is the registry
 38 #  2) An LDAP server is the registry, in which case the Fabric CA server
 39 #     calls the LDAP server to perform these tasks.
 40 #############################################################################
 41 registry:
 42   # Maximum number of times a password/secret can be reused for enrollment
 43   # (default: 0, which means there is no limit)
 44   maxEnrollments: 0
 45 
 46   # Contains identity information which is used when LDAP is disabled
 47   identities:
 48      - name: <<<ADMIN>>>
 49        pass: <<<ADMINPW>>>
 50        type: client
 51        affiliation: ""
 52        attrs:
 53           hf.Registrar.Roles: "client,user,peer,validator,auditor,ca"
 54           hf.Registrar.DelegateRoles: "client,user,validator,auditor"
 55           hf.Revoker: true
 56           hf.IntermediateCA: true
 57 
 58 #############################################################################
 59 #  Database section
 60 #  Supported types are: "sqlite3", "postgres", and "mysql".
 61 #  The datasource value depends on the type.
 62 #  If the type is "sqlite3", the datasource value is a file name to use
 63 #  as the database store.  Since "sqlite3" is an embedded database, it
 64 #  may not be used if you want to run the Fabric CA server in a cluster.
 65 #  To run the Fabric CA server in a cluster, you must choose "postgres"
 66 #  or "mysql".
 67 #############################################################################
 68 db:
 69   type: sqlite3
 70   datasource: fabric-ca-server.db
 71   tls:
 72       enabled: false
 73       certfiles:
 74         - db-server-cert.pem
 75       client:
 76         certfile: db-client-cert.pem
 77         keyfile: db-client-key.pem
 78 
 79 #############################################################################
 80 #  LDAP section
 81 #  If LDAP is enabled, the Fabric CA server calls LDAP to:
 82 #  1) authenticate enrollment ID and secret (i.e. identity name and password)
 83 #     for enrollment requests
 84 #  2) To retrieve identity attributes
 85 #############################################################################
 86 ldap:
 87    # Enables or disables the LDAP client (default: false)
 88    enabled: false
 89    # The URL of the LDAP server
 90    url: ldap://<adminDN>:<adminPassword>@<host>:<port>/<base>
 91    tls:
 92       certfiles:
 93         - ldap-server-cert.pem
 94       client:
 95          certfile: ldap-client-cert.pem
 96          keyfile: ldap-client-key.pem
 97 
 98 #############################################################################
 99 #  Affiliation section
100 #############################################################################
101 affiliations:
102    org1:
103       - department1
104       - department2
105    org2:
106       - department1
107 
108 #############################################################################
109 #  Signing section
110 #############################################################################
111 signing:
112     profiles:
113       ca:
114          usage:
115            - cert sign
116          expiry: 8000h
117          caconstraint:
118            isca: true
119     default:
120       usage:
121         - cert sign
122       expiry: 8000h
123 
124 ###########################################################################
125 #  Certificate Signing Request section for generating the CA certificate
126 ###########################################################################
127 csr:
128    cn: fabric-ca-server
129    names:
130       - C: US
131         ST: North Carolina
132         L:
133         O: Hyperledger
134         OU: Fabric
135    hosts:
136      - <<<MYHOST>>>
137    ca:
138       pathlen:
139       pathlenzero:
140       expiry:
141 
142 #############################################################################
143 #  Crypto section configures the crypto primitives used for all
144 #############################################################################
145 crypto:
146   software:
147      hash_family: SHA2
148      security_level: 256
149      ephemeral: false
150      key_store_dir: keys
CA Server Config 

客戶端配置文件格式

客戶端啟動時,可以通過 -c 或 --config 選項指定配置文件,若目標文件不存在,將在指定路徑創建一個默認配置文件(若不提供 -c 或 --config 選項,則在客戶端的家目錄下創建),內容類似如下:

 1 #############################################################################
 2 # Client Configuration
 3 #############################################################################
 4 
 5 # URL of the Fabric CA server (default: http://localhost:7054)
 6 URL: http://localhost:7054
 7 
 8 # Membership Service Provider (MSP) directory
 9 # When the client is used to enroll a peer or an orderer, this field must be
10 # set to the MSP directory of the peer/orderer
11 MSPDir:
12 
13 #############################################################################
14 #    TLS section for secure socket connection
15 #############################################################################
16 tls:
17   # Enable TLS (default: false)
18   enabled: false
19   certfiles:
20   client:
21     certfile:
22     keyfile:
23 
24 #############################################################################
25 #  Certificate Signing Request section for generating the CSR for
26 #  an enrollment certificate (ECert)
27 #############################################################################
28 csr:
29   cn: <<<ENROLLMENT_ID>>>
30   names:
31     - C: US
32       ST: North Carolina
33       L:
34       O: Hyperledger
35       OU: Fabric
36   hosts:
37    - <<<MYHOST>>>
38   ca:
39     pathlen:
40     pathlenzero:
41     expiry:
42 
43 #############################################################################
44 #  Registration section used to register a new identity with Fabric CA server
45 #############################################################################
46 id:
47   name:
48   type:
49   affiliation:
50   attributes:
51     - name:
52       value:
53 
54 #############################################################################
55 #  Enrollment section used to enroll an identity with Fabric CA server
56 #############################################################################
57 enrollment:
58   hosts:
59   profile:
60   label:
CA Client Config 

配置信息的優先級

如下三種方式,優先級依次降低(即:命令行優先於環境變量,環境變量優先於配置文件):

    1. 通過命令行選項指定
    2. 通過設置環境變量指定
    3. 寫入配置文件

如下所示,配置文件中指定了證書名稱:

tls:
  # Enable TLS (default: false)
  enabled: false

  # TLS for the client's listenting port (default: false)
  certfiles:
  client:
    certfile: cert.pem
    keyfile: 

若之后再定義如下環境變量,則有效證書名稱為:cert2.pem

export FABRIC_CA_CLIENT_TLS_CLIENT_CERTFILE=cert2.pem 

若之后再通過命令行指定如下內容,則有效證書名稱為:cert3.pem

fabric-ca-client enroll --tls.client.certfile cert3.pem

注:配置文件中指定文件路徑時,可以使用相對路徑(相對於該配置文件所在位置)或絕對路徑。

Fabric CA 服務端

這一部分將詳細描述Fabric CA 服務端。

服務端家目錄位置,按如下規則確定:

    • 若已設定環境變量 FABRIC_CA_SERVER_HOME,以此為准
    • 否則,若已設定 FABRIC_CA_HOME,以此為准
    • 否則,若已設定 CA_CFG_PATH,以此為准
    • 否則,使用當前目錄,即:$PWD

本部分接下來的介紹,將假設 FABRIC_CA_HOME 已初設定為 $HOME/fabric-ca/server ,且服務端配置文件位於此目錄下。

初始化服務端 

如前所述,初始化服務端使用如下形式:

# fabric-ca-server init -b admin:adminpw 

初始化時,需要 -b (bootstrap identity) 選項;服務端啟動,需要至少有一個自我認證的身份存在。

服務端配置文件中有一個 CSR (Certificate Signing Request) 區域,如下是一個示例。

如果需果通過 TLS 遠程連接到服務端,請將 cn 字段的值替換為服務端 IP 或 域名:

cn: localhost
key:
    algo: ecdsa
    size: 256
names:
  - C: US
    ST: "North Carolina"
    L:
    O: Hyperledger
    OU: Fabric 

以上字段是由 fabric-ca-init 生成的,用於 X.509 簽名密鑰和證書,作用於配置文件中指定的 ca.certfile 與 ca.keyfile 。

各字段含義如下:

    • cn:Common Name
    • key:指定密鑰算法和密鑰長度
    • O:organization name
    • OU:organization unit
    • L:location or city
    • ST:state
    • C:country

如果 CSR 區域的值需要自定義,首先刪除 ca.certfile 與 ca.keyfile 字段指定的文件,然后再次運行 fabric-ca-server init -b admin:adminpw 。

如果指定了 -u <parent-fabric-ca-server-URL> 選項,則 Fabric CA 服務端自身的證書由上級 CA 簽發;否則,fabric-ca-server init 將生成一個自簽證書,同時在服務端家目錄下生成一個名為 fabric-ca-server-config.yaml 的默認配置文件。

算法和密鑰長度:

在 CSR 中可以指定用於生成 X.509 密鑰和證書的算法,可選 RSA 或 ECDSA (Elliptic Curve Digital Signature Algorithm);如下示例使用 ecdsa-with-SHA256 算法:

key:
   algo: ecdsa
   size: 256 

ECDSA 可選的密鑰長度:256、384、512;RSA 可選的密鑰長度:2048、4096 。

啟動服務端

如下形式將啟動 Fabric CA 服務端:

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

如果此前沒有執行 fabric-ca-server init,將首先執行初始化動作,生成 ca-cert.pem、ca-key.pem 及一個默認配置文件。

除非使用基於 LDAP 的用戶認證,否則需要至少一個自認證管理員身份,用於登記和認證其它身份;此處的 -b 選項與 init 時的意義相同。

如果需要限制同一個管理員密碼可以發放的證書總量,可以設置 registry.maxEnrollments 為適當的值,若設置為 0,表示無限制,默認為 0。

Fabric CA 服務端默認監聽在 7054 端口。

配置數據庫

Fabric CA 默認使用的數據庫是 SQLite,默認數據庫文件位於服務端家目錄下的 fabric-ca-server.db。

可以選擇使用 PostgreSQL 或 MySQL。

PostgreSQL

官方手冊:https://www.postgresql.org/docs/manuals

如下示例配置可用於連接 PostgreSQL,請確保其中的各個變量值被正確設置。

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

如果需要使用 TLS 連接數據庫,則必須設置 Fabric CA 服務端配置文件中的 db.tls 部分;若 PostgreSQL 服務端啟用了針對客戶端的 SSL 認證,則需要同時指定 db.tls.client 部分。

如下是一份 db.tls 配置示例:

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

certfiles 字段用於指定一個或多個 PEM 格式編碼的可信 ROOT CA 證書文件;certfile 與 keyfile 指定 PEM 格式編碼的證書和私鑰,在與 PostgreSQL 服務端通信時,用於證明 Fabric CA 服務端的合法身份。

MySQL

略...

配置 LDAP

略...

配置集群

HAProxy 配置...略...

Fabric CA 客戶端

Fabric CA 客戶端的家目錄,由如下其中一個條件決定(優先級由高到低):

    1. FABRIC_CA_CLIENT_HOME 環境變量
    2. FABRIC_CA_HOME 環境變量
    3. CA_CFG_PATH 環境變量
    4. $HOME/.fabric-ca-client 目錄

接下來的介紹,假定客戶端的配置文件存放於客戶端的有效家目錄下。

管理員身份自認證

首先,修改配置文件,其中 csr.cn 字段必須與自認證的身份名稱相同。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 端口的服務端,對 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 中,命令執行成功后提示這些文件的存儲位置。

登記普通角色身份

執行登記(register)行為的角色本身首先要獲得認證,並擁有認證目標角色的權限。

Fabric CA 服務端在執行登記的過程中,會做兩項權限檢查:

    1. 執行認證行為的角色必須具有 "hf.Registar.Roles" 屬性(此屬性的各個值以逗號分隔),並且被認證的身份必須包含在其中。
      • 例如:登記角色的 "hf.Registar.Roles" 值是 "peer,app,user",則它可以登記 peer、app、user 三種角色,但不能登記 orderer 角色
    1. 執行認證行為的角色的組織關系(affiliation)必須與被認證的角色在同一部門或是其上級部門。
      • 例如:組織關系為 "a.b" 的登記身份,有權登記 "a.b.c" 部門的角色,但無取登記 “a.d” 部門的角色

如下示例,使用 admin 的身份及其配套證書,登記了一個名稱為 "admin2"、類型為 "user"、組織關系為 "org1.department1"、"hf.Revoker" 屬性為 "true" 的新角色:

# 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

下一步(認證/enroll)所必須的密碼將會被打印出來,其它具有認證權限的身份(如:除 "admin" 之外的管理員)可以使用這個密碼,對 "admin2" 進行直接認證,不必是自己先前親自登記的。

fabric-ca-client 命令的各個選項,都可以預先在配置文件中設置默認值,這樣執行對應操作的時候就可以簡化選項,若有如下配置:

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

則上述登記命令可簡化為:

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

如下命令登記了一個名為 "peer1" 的身份,它是接下來的用於示例的被認證對象:

# 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

注意,下一步將要用到的認證密碼是可以通過 --id.secret 手動指定的。

認證普通角色身份

通過上一步已經成功登記了一個節點的身份,現在可以通過指定被認證角色的 ID 和對應的密碼來執行認證,這與管理員角色自認證過程類似,除了此處演示了使用 -M 選項指定 MSP(Membership Service Provider) 路徑。

如下命令對 peer1 身份進行了認證,請將 -M 選項的值替換為你所在的 Fabric CA 客戶端中名為 core.yaml 的配置文件中的 'mspConfigPath' 字段的值:

# 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 路徑的值替換為 order 節點上的 orderer.yaml 文件中的 'LocalMSPDir' 字段指定的值。

從其它 CA 服務器獲取證書鏈

證書鏈,即是從直接執行認證行為的最下層 CA 機構,一直到最上層的根 CA 機構所經過的所有 CA 機構形成的線性依賴的證書集合。

通常 MSP 下存放證書的目錄中,必須包含對當前節點來說可信任的、所有各級證書頒發機構的證書。

fabric-ca-client getcacerts 命令用於從其它 Fabric CA 服務端獲取這些證書。

如下示例在本地啟動了一個監聽在 7055 端口、名為 "CA2" 的服務端,這展示了一個在區塊鏈上由其它成員管理的完全獨立的可信認證節點:

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

如下命令將把 CA2 的證書安裝到 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 

身份重新認證

如果證書將要過期,或者已經處於不安全狀態,則需要重新認證獲取新的證書:

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

證書與身份登記信息的撤銷

身份登記信息和證書是可以被撤銷的。撤銷身份將使該身份所擁有的所有證書失效,並且會拒絕該身份申請新的證書;撤銷證書只對單個證書有效。

執行撤銷動作的角色必須具備 "hf.Revoker" 屬性,並且其組織關系是與被撤銷的對象處於同一部門或是其上級。例如:組織關系為 "orgs.org1" 的角色可以對組織關系為 "orgs.org1.department1" 的角色執行撤銷動作,但不能對組織關系為 "orgs.org2" 的角色執行撤銷動作。

如下命令撤銷了一個身份(同時會撤銷與其所擁有的所有證書),認身份未來的所有認證請求都會 Fabric CA 服務端拒絕:

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

-r 選項可用的值有如下 10 項:

    1. unspecified
    2. keycompromise
    3. cacompromise
    4. affiliationchange
    5. superseded
    6. cessationofoperation
    7. certificatehold
    8. removefromcrl
    9. privilegewithdrawn
    10. aacompromise

如下,擁有最頂級組織關系的 admin 自認證身份,可以以如下方式注銷掉 peer1 的身份:

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

可以通過指定 AKI(Authority Key Identifier) 及其序列號來撤銷單個證書:

fabric-ca-client revoke -a xxx -s yyy -r <reason>    #-s: serial number 

某個證書的 AKI 與序列號可以通過 openssl 命令獲取,如:

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

啟用 TLS

以下將描述如何為 Fabric CA 客戶端啟用 TLS 支持。

以類似如下的方式配置 fabric-ca-client-config.yaml 文件:

tls:
  # Enable TLS (default: false)
  enabled: true
  certfiles:
    - root.pem
  client:
    certfile: tls_client-cert.pem
    keyfile: tls_client-key.pem 

certfiles 選項用於指定當前客戶端信任的根證書集合,這通常就是 Fabric CA 服務端家目錄下的 ca-cert.pem 文件。

client 部分的選項,只有當 Fabric CA 服務端啟用了 TLS 雙向認證策略時才需要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM