Fabric CA指南

引言

Fabric CA項目是超級賬本Fabric內的MemberService組件, 對網(wǎng)絡內各個實體的身份證書的管理, 它提供的功能有:

1. 身份認證纹坐,或者從 LDAP(輕量目錄訪問協(xié)議) 中獲取注冊信息巍棱;

2. 發(fā)行擔保證書 ECerts (Enrollment Certificates)佳遂;

3. 發(fā)行交易證書 TCerts (Transaction Certificates)国拇,保障 Hyperledger Fabric 區(qū)域鏈交易平臺上的信息匿名性和不可追蹤性佛舱;

4. 證書更新和撤銷山憨。

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

Fabric CA采用Go語言進行編寫祥得。

本文主要參考:https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#getting-started

一. 概述


上圖展現(xiàn)了 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 部分。

如前圖所示额衙,F(xiàn)abric CA 客戶端或 SDK 的請求首先會到達 Fabric CA 集群前端的高可用負載均衡服務端饮焦,實際的 CA 服務由后端的某臺Fabric CA 服務端提供。同一集群中的所有 Fabric CA 服務端共享相同的后端數(shù)據(jù)庫(或 LDAP)集群窍侧,以確保證書和身份的一致性县踢。

二. 安裝

2.1 前提條件

1. 安裝好 Go 1.10.x

2. 正確設置?`GOPATH`環(huán)境變量

3. 安裝好libtool 和 libtdhl-dev 包

在Ubuntu上安裝libtool:

#?sudo apt install libtool libltdl-dev

安裝 fabric-ca-server 與 fabric-ca-client 兩個終端命令行工具。

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

2.2 啟動服務端:本地環(huán)境

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

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

默認將在當前目錄創(chuàng)建一個名為 fabric-ca-server-config.yaml?的配置文件斧账,該文件的存儲位置也可以另行指定谴返。

2.3 啟動服務端:Docker 環(huán)境

也可以選擇在 Docker 環(huán)境下運行服務端,如下將創(chuàng)建并通過 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 CLI

至此嗓袱,F(xiàn)abric CA的環(huán)境已搭建完畢∠熬睿可以使用相關命令進行操作渠抹,具體包括兩部分:

1 Fabric CA server 命令,具體使用請參考:https://hyperledger-fabric-ca.readthedocs.io/en/latest/servercli.html

2 Fabric CA client 命令,具體使用請參考:https://hyperledger-fabric-ca.readthedocs.io/en/latest/clientcli.html

四. 配置方法及其優(yōu)先級

Fabric CA 有三種設置配置的方法(優(yōu)先級由高到低): :

1. CLI 參數(shù)

2. 環(huán)境變量

3. 配置文件

以下內容中逼肯,將演示如何改配置文件,但是配置文件的設置會被環(huán)境變量及CLI參數(shù)覆蓋桃煎。

如下是client的配置文件:

下面的環(huán)境變量將會覆蓋上面的配置:

export FABRIC_CA_CLIENT_TLS_CLIENT_CERTFILE=cert2.pem

下面這個CLI參數(shù)能覆蓋配置文件和環(huán)境變量:

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

fabric-ca-server服務器也一樣篮幢, 只不過環(huán)境變量名不是以?FABIRC_CA_CLIENT?開頭,而是FABRIC_CA_SERVER?。

五. Fabric CA 服務器

在啟動服務器前要先初始化它为迈。這個過程會產(chǎn)生一份默認的配置文件三椿,然后你可以檢查并修改。

Fabric CA服務器的home目錄是這樣決定的:

1 如果設置了?FABRIC_CA_SERVER_HOME?環(huán)境變量, 則就取它的值

2 否則就取?FABRIC_CA_HOME?的值

3 否則就取?CA_CFG_PATH?的值

4 否則就用當前的工作目錄

在本章節(jié)中, 我們假設已經(jīng)設置了環(huán)境變量?FABRIC_CA_HOME?為$HOME/fabric-ca/server葫辐。

下面的指令假設你已經(jīng)將配置文件放在了服務器的home目錄下搜锰。

5.1 服務端命令剖析

fabric-ca-server命令主要負責啟動一個CA服務, 包括init和start兩個子命令

用以下語句初始化CA服務器:

fabric-ca-server init -b admin:adminpw

當LDAP被禁用時,就必須要有這個?-b?(代表“啟動身份”bootstrap identity) 選項耿战。 啟動服務器必須要有啟動身份; 這個身份就是管理員身份蛋叼。

生成的配置文件fabric-ca-server-config.yaml類似下圖:


配置文件里可以配置證書簽名請求域 (Certificate Signing Request簡稱CSR),以下就是一個CSR域的示例剂陡。


以上所有字段都對應了X.509證書的字段狈涮,即調用?fabric-ca-server?init?生成的證書字段。 這個CSR的域設置效果等同于配置中的?ca.certfile?和?ca.keyfile?兩個配置域的組合鸭栖。 配置了CSR域就是用這些信息自己給自己簽名歌馍,ca.certfile和ca.keyfile是用這兩個文件自簽名。

字段解釋如下:

cn?證書名Common Name

O?組織名organization name

OU?組織單元organizational unit

L?位置location or city

ST?州state

C?國家country

如果要配置CSR晕鹊,就要把?ca.certfile?和?ca-keyfile?對應的文件刪了松却。(官方默認是ca-cert.pem和ca-key.pem) 然后重新運行一下?fabric-ca-server?init?-b?admin:adminpw

fabric-ca-server?init?命令會生成一個自簽名證書。

如果你要指定 CA 簽名證書 和 key 文件溅话, 你就得把文件放到?ca.certfile?和?ca.keyfile?的指定路徑下晓锻。?

文件必須是PEM格式且不可加密。此處摘抄一句英文原文:

Both files must be PEM-encoded and must not be encrypted.

CA簽名證書必須以?-----BEGIN?CERTIFICATE-----?開頭飞几。 key 文件必須以?-----BEGIN?PRIVATE?KEY-----?開頭带射,而不是-----BEGIN?ENCRYPTED?PRIVATE?KEY-----。

5.2 啟動服務器

用以下命令啟動CA服務器:

fabric-ca-server start -b <admin>:<adminpw>

第一次啟動時循狰,如果服務器未初始化窟社,則會先進行初始化。

在初始化期間绪钥,如果發(fā)現(xiàn) ca-cert.pem 和 ca-key.pem 不存在灿里,則會先生成,如果配置文件不存在也會生成默認的配置文件程腹。?

除非你用的是LDAP匣吊,否則你必須要先有一個預先注冊好的bootstrap身份信息用來注冊和登記其他身份信息。 用?-b?選項來指定bootstrap身份。

如果要讓服務器監(jiān)聽?https?而不是?http色鸳,則需要設置?tls.enabled?為?true社痛。

要限制同一個 secret (或 password) 的登記使用次數(shù),需要給?registry.maxenrollments?配置項設置一個值。 如果設置為1, 則每個 enrollment ID只能被登記一次借杰,如果設置為 -1, 則secret的登記使用次數(shù)不做限制撑螺。 默認值是-1。 如果設置為0, 則所有的身份或者是注冊進來的身份都不能被登記了撵儿。

啟動后,CA服務器監(jiān)聽端口是 7054狐血。

六. Fabric CA 客戶端

6.1 準備工作

本節(jié)講述如何使用fabric-ca-client的命令淀歇。

首先,要先確定Fabric CA client的home目錄匈织,其決定順序如下:

命令行 -home 選項

環(huán)境變量?FABRIC_CA_CLIENT_HOME

環(huán)境變量?FABRIC_CA_HOME

環(huán)境變量?CA_CFG_PATH

$HOME/.fabric-ca-client

請將配置文件放home目錄下后浪默,完成以下過程。

enroll the bootstrap identity

CA的賬號概念是:先注冊identity缀匕,它帶有一個enrollment id浴鸿,然后可以enroll具體的賬號,可以在csr里指定屬性弦追。

一個賬號的生命周期如下圖所示:

(注:register字面的意思是注冊岳链,注冊就是主體向 CA 自我介紹的過程;enroll字面的意思是登記劲件,就是最終實體進行證書申請并從 CA 接收證書的過程)

從創(chuàng)建超級管理員到注冊用戶過程如下:

bootstrap identity即超級管理員identity掸哑,注冊是在ca-server初始化時完成的(用-b 選項指定enrollment ID和密碼)。

client端配置好CSR零远,并enroll了超級管理員identity到home目錄下的msp

client去向CA register user的identity苗分,CA認可client的msp,client去向CA enroll 剛才user的msp牵辣。

根據(jù)需要自定義client home目錄下配置文件中的CSR部分摔癣,其中``csr.cn``必須設置為bootstrap identity的enrollment ID。

然后運行?fabric-ca-client?enroll?命令去enroll一個identity纬向。例如, 以下命令會enroll一個ID是?admin?密碼是?adminpw?的identity择浊, 其調用的是運行在本地的監(jiān)聽7054端口的Fabric CA 服務器。

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin

fabric-ca-client enroll -u http://admin:adminpw@localhost:7054

enroll命令會生成一份enrollment 證書 (ECert), 以及對應的私鑰文件和CA根證書 PEM 文件 逾条,保存在Fabric CA client的?msp?子目錄下琢岩。 提示信息里會告訴你保存到哪個目錄。

6.2 注冊一個新identity

發(fā)起注冊請求的身份必須是已經(jīng)登記(enroll)過的师脂,同時也必須有權限去注冊要注冊的相應類型的身份担孔。

在register期間江锨,CA server會做兩個授權檢查:

調用者要register的身份必須是其“hf.Registrar.Roles”屬性中所指明的身份中的一個。 例如調用者的“hf.Registrar.Roles”屬性值為“peer,app,user”糕篇,那么他不能register orderer類型的identity啄育。

調用者identity的從屬關系必須等于要register時候的從屬關系的前綴。 例如拌消,一個調用者的從屬關系是“a.b”挑豌,

那么他可以register一個擁有”a.b.c”的identity, 但不能是“a.c”拼坎。

下文的命令用admin identity去register一個新的identity,他的enrollment id是admin2完疫, 類型是user泰鸡,從屬關系是org1.department1,hf.Revoker屬性的值為true壳鹤,foo屬性的值為bar盛龄。

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.attrs 'hf.Revoker=true,foo=bar'

CA server會返回一個密碼,用于這個identity去enroll芳誓。 也允許一個管理員去register一個identity余舶, 然后將這個identity對應的enrollment ID和密碼給其他人去enroll。

如果設置?maxenrollments?為 0 或者不設置則其默認值為 CA的 最大 enrollment 值锹淌。 這個注冊用戶的最大enroll值不能超過CA的最大enroll值匿值, 比如CA的最大值設置為是5,則所有注冊的身份只能小于等于 5, 而且也不能設置為 -1 (無限enroll).

下面我們注冊一個?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 peer1p

6.3 Enroll一個 Peer identity

注冊好身份后就可以enroll烟号,enroll需要使用剛才注冊的enrollmentID和密碼(比如上節(jié)例子里的?password?)绊谭。這個enroll和enroll bootstrap身份有點像,只不過我們這里還用到了 “-M” 選項 用于指定生成 MSP (Membership Service Provider) 目錄結構汪拥。

以下是enroll一個 peer1达传。 確保 “-M” 指定的目錄為你的 peer的 MSP 目錄, 要與peer的core.yaml文件里設置的 ‘mspConfigPath’ 值要保持一致迫筑。 你也可以設置 FABRIC_CA_CLIENT_HOME 為你的 peer的home目錄宪赶。

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

enroll一個orderer也類似,只不過-M指定的是orderer.yaml里的 ‘LocalMSPDir’ 脯燃。

6.4 重新enroll一個identity

假設你的證書到期了逊朽,就需要用以下命令重新enroll一份了

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1

fabric-ca-client reenroll

6.5 撤銷一個證書或一個identity

撤銷一個identity會撤銷他的所有證書,并阻止他再得到新的證書曲伊,撤銷一個證書只是使一個證書無效叽讳。 撤銷者的從屬關系是orgs.org1可以撤銷從屬關系是orgs.org1和orgs.org1.department1的identity追他,但不能撤銷orgs.org1的identity。

例子:bootstrap admin這個超級用戶可以撤銷**peer1**這個身份

export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin

fabric-ca-client revoke -e peer1

6.6 客戶端命令剖析

fabric-ca-client命令可以與服務端進行交互, 包括五個子命令:

enroll: 登錄獲取ECert

getcacert: 獲取CA服務的證書鏈

reenroll: 再次登錄

register: 注冊用戶實體

revoke: 吊銷簽發(fā)的實體證書

6.6.1 enroll命令

向服務端申請簽發(fā)ECert證書并將文件保存至本地

$ fabric-ca-client enroll -u http://admin:pass@localhost:7054

6.6.2 getcacert命令

向服務端申請根證書信息并保存至本地主配置目錄的msp/cacerts路徑下

$ fabric-ca-client getcacert -u http://admin:pass@localhost:7054

證書命名格式為: 服務器主機名-CA實例名.pem

6.6.3 reenroll命令

利用本地配置信息再次執(zhí)行enroll過程, 生成新的簽名證書材料

$ fabric-ca-client reenroll

6.6.4 register命令

執(zhí)行注冊新用戶實體的客戶端必須已經(jīng)通過登記認證, 并且擁有足夠的權限(所注冊用戶的hf.Registrar.Roles和affiliation都不能超出調用者屬性)來進行注冊

$ fabric-ca-client register --id.name jack --id.type user --id.affiliation org1.department1 --id.attrs'"hf.Registrar.Roles=peer,user"'--id.attrs'hf.Revoker=true'--id.secret jackpw

6.6.5 revoke命令

吊銷指定的證書或指定實體相關的所有證書. 執(zhí)行revoke命令的客戶端身份必須擁有足夠的權限(hf.Revoker為true, 并且被吊銷者機構不能超出吊銷者機構的范圍)

$ fabric-ca-client revoke -e "jack" -r "affiliationchange"

-e: 指定吊銷用戶

-r: 指定吊銷原因

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末岛蚤,一起剝皮案震驚了整個濱河市邑狸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌涤妒,老刑警劉巖单雾,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異她紫,居然都是意外死亡硅堆,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門贿讹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渐逃,“玉大人,你說我怎么就攤上這事民褂∏丫眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵赊堪,是天一觀的道長面殖。 經(jīng)常有香客問我,道長哭廉,這世上最難降的妖魔是什么脊僚? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮遵绰,結果婚禮上吃挑,老公的妹妹穿的比我還像新娘。我一直安慰自己街立,他們只是感情好舶衬,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赎离,像睡著了一般逛犹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上梁剔,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天虽画,我揣著相機與錄音,去河邊找鬼荣病。 笑死码撰,一個胖子當著我的面吹牛,可吹牛的內容都是我干的个盆。 我是一名探鬼主播脖岛,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼朵栖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了柴梆?” 一聲冷哼從身側響起陨溅,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绍在,沒想到半個月后门扇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡偿渡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年臼寄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溜宽。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吉拳,死狀恐怖,靈堂內的尸體忽然破棺而出坑质,到底是詐尸還是另有隱情合武,我是刑警寧澤临梗,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布涡扼,位于F島的核電站,受9級特大地震影響盟庞,放射性物質發(fā)生泄漏吃沪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一什猖、第九天 我趴在偏房一處隱蔽的房頂上張望票彪。 院中可真熱鬧,春花似錦不狮、人聲如沸降铸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽推掸。三九已至,卻和暖如春驻仅,著一層夾襖步出監(jiān)牢的瞬間谅畅,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工噪服, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毡泻,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓粘优,卻偏偏與公主長得像仇味,于是被迫代替她去往敵國和親呻顽。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容