Fabric CA/數字證書管理

MSP(Membership Service Provider)成員管理服務提供商

 

名詞:

1。CSR(Cerificate Signing Request):證書籤署請求文件

    CSR裏包含申請者的 DN(Distinguished Name,標識名)和公鑰信息(在第三方機構簽署證書時要提供)。html

    證書頒發機構拿到 CSR 後使用其根證書私鑰對證書進行加密並生成 CRT 證書文件,裏面包含證書加密信息、申請者的 DN 、公鑰信息。前端

 

一。概述

說明:mysql

MSP是Hyperledger Fabric1.0引入的一個組件。目的:抽象化各成員之間的控制結構關係。(MSP將證書頒發/用戶認證/後臺加密機制和協議都進行了抽象)linux

每一個MSP可定義本身規則:身份認證/簽名的生成/認證。git

每一個Hyperledger Fabric 1.0區塊鏈網絡可引入一個/多個MSP來進行網絡管理。(即將成員自己和成員間操做、規則、流程都模塊化)github

1。成員身份是基於標準的x.509證書。利用PKI體系爲每一個成員頒發數字證書。結合所屬MSP進行身份認證和權限控制。sql

2。根CA證書(Root Certificate):docker

【1】自簽名證書數據庫

【2】用根CA證書私鑰簽名的證書還可簽發新的證書json

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頒發數字證書

相關文章
相關標籤/搜索