MSP(Membership Service Provider)成員管理服務提供商
名詞:
1。CSR(Cerificate Signing Request):證書簽署請求文件
CSR里包含申請者的 DN(Distinguished Name,標識名)和公鑰信息(在第三方機構簽署證書時要提供)。
證書頒發機構拿到 CSR 后使用其根證書私鑰對證書進行加密並生成 CRT 證書文件,里面包含證書加密信息、申請者的 DN 、公鑰信息。
一。概述
說明:
MSP是Hyperledger Fabric1.0引入的一個組件。目的:抽象化各成員之間的控制結構關系。(MSP將證書頒發/用戶認證/后台加密機制和協議都進行了抽象)
每個MSP可定義自己規則:身份認證/簽名的生成/認證。
每個Hyperledger Fabric 1.0區塊鏈網絡可引入一個/多個MSP來進行網絡管理。(即將成員本身和成員間操作、規則、流程都模塊化)
1。成員身份是基於標准的x.509證書。利用PKI體系為每個成員頒發數字證書。結合所屬MSP進行身份認證和權限控制。
2。根CA證書(Root Certificate):
【1】自簽名證書
【2】用根CA證書私鑰簽名的證書還可簽發新的證書
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
注:參數類型標記為“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
注:參數類型標記為“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:私密信息管理利器 ##用於生成私鑰/導入/導出/加解密/簽名/驗簽