Hyperledger:Fabric CA 用戶指南 [譯]

Fabric CA 用戶指南

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

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

它提供的功能有:mysql

    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 。git

本文目錄

    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 總體架構中去的。 github

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

    1. 經過 Fabric CA 客戶端
    2. 使用某種 Fabric SDK

與 Fabric CA 服務端的全部通訊,都是經過 REST API 進行的。詳情可查看 fabric-ca/swagger/swagger-fabric-ca.json 處的 swagger 文檔中的 REST API 部分。sql

如前圖所示,Fabric CA 客戶端或 SDK 的請求首先會到達 Fabric CA 集羣前端的高可用負載均衡服務端,實際的 CA 服務由後端的某臺Fabric CA 服務端提供。同一集羣中的全部 Fabric CA 服務端共享相同的後端數據庫(或 LDAP)集羣,以確保證書和身份的一致性。docker

入門

運行環境要求

    • 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 選項用於指定管理員的帳號與密碼。json

# 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 可選的密鑰長度:25六、38四、512;RSA 可選的密鑰長度:204八、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 雙向認證策略時才須要。

相關文章
相關標籤/搜索