Hyperledger Fabric CA的命令行用法

介紹Hyperledger Fabric CA的命令行方式簡單用法

Hyperledger Fabric CA由server和client兩部分組成涌献。
設置兩個環(huán)境變量

export FABRIC_CA_SERVER_HOME=/path_to/fabric-ca/server
export FABRIC_CA_CLIENT_HOME=/path_to/fabric-ca/client

server的操作主要有兩個:

1. 初始化Server服務

在server啟動之前胖烛,需要至少有一個自我認證的身份存在碗暗,這個步驟主要會創(chuàng)建這個自我認證的身份竞端。

${FABRIC_CA_SERVER_HOME}/fabric-ca-server init -b admin:adminpw
2017/10/09 13:44:47 [INFO] Created default configuration file at /path_to/fabric-ca/server/fabric-ca-server-config.yaml
2017/10/09 13:44:47 [INFO] generating key: &{A:ecdsa S:256}
2017/10/09 13:44:47 [INFO] encoded CSR
2017/10/09 13:44:47 [INFO] signed certificate with serial number 140063197993174970535175712880510082344059841460
2017/10/09 13:44:47 [INFO] The CA key and certificate were generated for CA 
2017/10/09 13:44:47 [INFO] The key was stored by BCCSP provider 'SW'
2017/10/09 13:44:47 [INFO] The certificate is at: /path_to/fabric-ca/server/ca-cert.pem
2017/10/09 13:44:47 [INFO] Initialized sqlite3 database at /path_to/fabric-ca/server/fabric-ca-server.db
2017/10/09 13:44:47 [INFO] Home directory for default CA: /path_to/fabric-ca/server
2017/10/09 13:44:47 [INFO] Initialization was successful

命令執(zhí)行完成后生成如下4個文件:

  1. server配置文件
    ${FABRIC_CA_SERVER_HOME}/fabric-ca-server-config.yaml
  2. server內(nèi)部存儲數(shù)據(jù)庫文件
    ${FABRIC_CA_SERVER_HOME}/fabric-ca-server.db
  3. 自我認證身份的證書文件
    ${FABRIC_CA_SERVER_HOME}/ca-cert.pem
  4. 自我認證身份的私鑰(private key)文件${FABRIC_CA_SERVER_HOME}/msp/keystore/27554ec70fe8a2707c0a74ba5d6ecb36a0a4d565871c4f050ed93d662849560d_sk

其中${FABRIC_CA_SERVER_HOME}/fabric-ca-server.db是一個sqlite文件,包含三個表:

1. table affiliations
name VARCHAR(64)  | prekey VARCHAR(64)
------------------+--------------------+
org1              |                    |
org1.department1  |org1                |
org1.department2  |org1                |
org2              |                    |
org2.department1  |org2                |
------------------+--------------------+
2. table certificates
<no date>
3. table users
id VARCHAR(64)  | token bytea                                                 | type VARCHAR(64) | affiliation VARCHAR(64) |  attributes VARCHAR(256) | state INTEGER |  max_enrollments INTEGER  |
----------------+-------------------------------------------------------------+------------------+-------------------------+--------------------------+---------------+---------------------------+
admin           |$2a$10$9AVqV7I8tGvA0GPUbAuTluzTEiJwb1F1MHw2OjywGPqTeIH/5pvH6 |client            |                         |  <see bellow>            | 0             | -1                        |
----------------+-------------------------------------------------------------+------------------+-------------------------+--------------------------+---------------+---------------------------+

attributes=[{"name":"hf.Registrar.DelegateRoles","value":"client,user,validator,auditor"},{"name":"hf.Revoker","value":"1"},{"name":"hf.IntermediateCA","value":"1"},{"name":"hf.Registrar.Roles","value":"client,user,peer,validator,auditor"}]

2. 啟動Server服務

初始化完成之后就可以啟動server。

${FABRIC_CA_SERVER_HOME}/fabric-ca-server start -b admin:adminpw
2017/10/09 12:17:04 [INFO] Configuration file location: /path_to/fabric-ca/fabric-ca-server-config.yaml
2017/10/09 12:17:04 [INFO] Starting server in home directory: /path_to/fabric-ca
2017/10/09 12:17:04 [INFO] The CA key and certificate already exist
2017/10/09 12:17:04 [INFO] The key is stored by BCCSP provider 'SW'
2017/10/09 12:17:04 [INFO] The certificate is at: /path_to/fabric-ca/ca-cert.pem
2017/10/09 12:17:04 [INFO] Initialized sqlite3 database at /path_to/fabric-ca/fabric-ca-server.db
2017/10/09 12:17:04 [INFO] Home directory for default CA: /path_to/fabric-ca
2017/10/09 12:17:04 [INFO] Listening on %!s(int=7054)%!(EXTRA string=http://0.0.0.0:7054)

這里,啟動過程使用默認的配置文件墓阀,即在初始化階段生成的${FABRIC_CA_SERVER_HOME}/fabric-ca-server-config.yaml,如果需要使用非默認配置文件拓轻,只需要通過命令行參數(shù)--config指定文件名即可斯撮。

另,我們看到server端的主要操作有兩步完成扶叉,第一步初始化勿锅,第二步啟動;實際上兩步可以合并成一步枣氧,即直接執(zhí)行第二步啟動就可以溢十,因為在啟動過程中如果發(fā)現(xiàn)還沒有進行過初始化,那么會自動執(zhí)行初始化的操作达吞;那為什么需要分成兩步呢张弛,因為初始化完成之后用戶可能需要對配置文件進行修改,調(diào)整參數(shù)和配置酪劫,然后在啟動吞鸭,而如果直接執(zhí)行第二步就沒有機會修改和調(diào)整配置了。

啟動完之后可以發(fā)送如下命令檢查時候工作正常

$ curl -i -uadmin:adminpw -X POST -H "Content-type:application/json" http://localhost:7054/cainfo
HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 10 Oct 2017 05:42:16 GMT
Content-Length: 1127

{
  "success":true,
  "result":{
                 "CAName":"",
                 "CAChain":"LS0tLS1CRUdJT......tLS0K"
             },
  "errors":[],
  "messages":[]
}

下面三步是客戶端的操作

3. 完成自證管理員身份認證

自證管理員是在server啟動的時候就內(nèi)置進去的覆糟;后面的很多操作都需要管理員的身份刻剥,所以這一步先要獲取管理員的身份資格,才能往下操作滩字,比如添加新的角色身份造虏,添加新的管理員等等。

${FABRIC_CA_CLIENT_HOME}/fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
2017/10/09 15:58:40 [INFO] User provided config file: /path_to/fabric-ca/client/fabric-ca-client-config.yaml
2017/10/09 15:58:40 [INFO] Created a default configuration file at /path+_to/fabric-ca/client/fabric-ca-client-config.yaml
2017/10/09 15:58:40 [INFO] generating key: &{A:ecdsa S:256}
2017/10/09 15:58:40 [INFO] encoded CSR
2017/10/09 15:58:40 [INFO] Stored client certificate at /path_to/fabric-ca/client/msp/signcerts/cert.pem
2017/10/09 15:58:40 [INFO] Stored CA root certificate at /path_to/fabric-ca/client/msp/cacerts/localhost-7054.pem

端口7054是server的默認端口麦箍,可以在server配置文件里${FABRIC_CA_SERVER_HOME}/fabric-ca-server-config.yaml進行修改漓藕。

命令執(zhí)行完之后生成如下4個文件:

  1. client配置文件
    ${FABRIC_CA_CLIENT_HOME}/fabric-ca-client-config.yaml
  2. CA根證書文件
    ${FABRIC_CA_CLIENT_HOME}/msp/cacerts/localhost-7054.pem
    這個文件其實就是server端的自我認證身份的證書文件,即${FABRIC_CA_SERVER_HOME}/ca-cert.pem一致
  3. client證書文件
    ${FABRIC_CA_CLIENT_HOME}/msp/signcerts/cert.pem
  4. client私鑰(private key)文件
    ${FABRIC_CA_CLIENT_HOME}/msp/keystore/338dc8051e6aa74bcbc1ee7da17afb735e0d8c1291f0a6b6d98bfce605a774ba_sk

再看server端數(shù)據(jù)庫的變化内列,可以看到表certificates里面多了一條記錄:

1. certificates

id VARCHAR(64) | serial_number blob                      | authority_key_identifier blob            | ca_label blob | status blob | reason int | expiry timestamp          | revoked_at timestamp      | pem blob |
---------------+-----------------------------------------+------------------------------------------+---------------+------------------------------------------------------+---------------------------+----------+
admin          | 5b5c9e1859b1798088cf096c7f249301512fdc8 | bf588926fdff01c07124099d0455846fae32ecde |               | good        | 0          | 2018-10-09 07:54:00+00:00 | 0001-01-01 00:00:00+00:00 | <bellow> |
---------------+-----------------------------------------+------------------------------------------+---------------+------------------------------------------------------+---------------------------+----------+

pem blob=
-----BEGIN CERTIFICATE-----
MIICVjCCAfygAwIBAgIUBbXJ4YWbF5gIjPCWx/JJMBUS/cgwCgYIKoZIzj0EAwIw
aDELMAkGA1UEBhMCVVMxFzAVBgNVBAgTDk5vcnRoIENhcm9saW5hMRQwEgYDVQQK
...
A0gAMEUCIQDVO1GO+9k+g7hbuevLh/YRq9LQNptu6IaJOAzLuPdCeQIgcMvfoKuv
Y+W2JC70/xbL4yimpt86k55CA/aqyrmq5+0=
-----END CERTIFICATE-----

實際上這個pem的內(nèi)容就是client的證書文件撵术,即${FABRIC_CA_CLIENT_HOME}/msp/signcerts/cert.pem一致。

4. 登記普通角色身份(register)

如下示例话瞧,我們使用 admin 的身份及其配套證書嫩与,登記了一個名稱為 "tester"寝姿、類型為 "user"、組織關系為 "org1.department1"划滋、"hf.Revoker" 屬性為 "true" 的新角色:

${FABRIC_CA_CLIENT_HOME}/fabric-ca-client register --id.name tester   --id.secret testpasswd --id.type user --id.affiliation org1.department1 --id.attrs hf.Revoker=true
or
${FABRIC_CA_CLIENT_HOME}/fabric-ca-client register --id.name tester02 --id.secret testpasswd --id.type user --id.affiliation org1.department2 --id.attrs 'hf.Revoker=true,admin=true:ecert'

這地方需要注意的是:

  • --id.type參數(shù)必須是是server端配置文件fabric-ca-server-config.yaml里hf.Registrar.Roles屬性值里的一個饵筑。
  • --id.affiliation參數(shù)表示被注冊對象的從屬關系參數(shù)一定要歸屬于預先配置的組織屬性。換句話說处坪,被注冊對象的affiliation參數(shù)一定要是預先配置的affiliation參數(shù)的一個前綴根资。例如,假設預先配置的組織關系為:“a.b.c”同窘,那么新注冊的對象的affiliation屬性可以是“a.b.c”玄帕,也可以是“a.b”,但“a.c”就不能通過注冊想邦。

再看server端數(shù)據(jù)庫的變化裤纹,可以看到表users里面多了一條記錄。

1. table users
id VARCHAR(64)  | token bytea                                                  | type VARCHAR(64) | affiliation VARCHAR(64) |  attributes VARCHAR(256) | state INTEGER |  max_enrollments INTEGER  |
----------------+--------------------------------------------------------------+------------------+-------------------------+--------------------------+---------------+---------------------------+
admin           | $2a$10$9AVqV7I8tGvA0GPUbAuTluzTEiJwb1F1MHw2OjywGPqTeIH/5pvH6 | client           |                         | <see bellow>             | 0             | -1                        |
tester          | $2a$10$kOuCBi8IHk8tAUD9afNtLOYBmiYcse4rLdURILoumuJCI69FVDm2O | user             | org1.department1        | <see bellow>             | 0             | -1                        |
----------------+--------------------------------------------------------------+------------------+-------------------------+--------------------------+---------------+---------------------------+
attributes=[{"name":"hf.Registrar.DelegateRoles","value":"client,user,validator,auditor"},{"name":"hf.Revoker","value":"1"},{"name":"hf.IntermediateCA","value":"1"},{"name":"hf.Registrar.Roles","value":"client,user,peer,validator,auditor"}]
attributes=[{"name":"hf.Revoker","value":"true"}]

5. 認證普通角色身份(enroll)

完成身份登記之后需要做認證丧没。

${FABRIC_CA_CLIENT_HOME}/fabric-ca-client enroll -u http://tester:testpasswd@localhost:7054
or
${FABRIC_CA_CLIENT_HOME}/fabric-ca-client enroll -u http://tester02:testpasswd@localhost:7054

2017/10/09 13:34:52 [INFO] User provided config file: /path_to/fabric-ca-client/fabric-ca-client-config.yaml
2017/10/09 13:34:52 [INFO] generating key: &{A:ecdsa S:256}
2017/10/09 13:34:52 [INFO] encoded CSR
2017/10/09 13:34:52 [INFO] Stored client certificate at /path_to/fabric-ca-client/msp/signcerts/cert.pem
2017/10/09 13:34:52 [INFO] Stored CA root certificate at /path_to/fabric-ca-client/msp/cacerts/localhost-7054.pem

完成角色認證后鹰椒,再看server端數(shù)據(jù)庫的變化,和自證管理員身份認證一樣呕童,會往certificates表里面插入一條數(shù)據(jù)漆际,其內(nèi)容是對應角色的證書信息。

6. 總結登記(register)和認證(enroll)的功能

總結起來夺饲,登記身份和認證身份分別完成的功能是:

  1. 登記身份用來登記一個身份
    它需要提供待登記身份的身份信息奸汇,包含用戶名,密碼钞支,類型茫蛹,組織關系操刀,等屬性烁挟。
    實施登記的人,還需要有登記的權限骨坑,例如初始的自證管理員撼嗓,或其他管理員身份。
    登記過程不會生成本地文件欢唾,但是會往server的數(shù)據(jù)庫表users中插入一條數(shù)據(jù)且警。
  2. 認證身份用來認證一個前面已經(jīng)登記過的身份
    它需要提供登記時身份的名字和密碼;實施認證不需要認證的權利礁遣。
    認證過程會生成本地文件斑芜,包括client配置文件,client證書文件祟霍,client私鑰文件杏头,和根證書文件盈包。
    同時在server端會把client的證書寫入數(shù)據(jù)庫表certificates中。

這也就是client三個步驟里面醇王,第一步就需要做自證管理員身份的認證操作呢燥,因為此時客戶端沒有任何證書身份信息,只有自證管理員的名字和密碼寓娩,可以完成自證管理員的認證操作叛氨;完成后本地就有自證管理員的身份信息包括證書文件,私鑰棘伴;有了這些信息寞埠,才可以操作接下來的登記其他身份操作,因為登記一個身份需要具有登記權限的人才能做焊夸,既然剛才已經(jīng)完成了自證管理員的認證操作畸裳,那么本地身份就是自證管理員,因此可以以自證管理員身份進行其他的登記操作淳地。

另外要注意的是怖糊,在認證身份的時候會把之前已經(jīng)存在的所有配置文件(包括client配置文件,client證書文件颇象,client私鑰文件伍伤,根證書文件)都重新寫掉,文檔上說可以通過命令行指定不同的文件名遣钳,但是經(jīng)過試驗好像不靈扰魂,不知道這是我使用上的問題,還是程序bug蕴茴。所以在我們例子中當完成用戶tester的認證之后劝评,本地的證書信息就被覆蓋成tester的了,此時再進行用戶登記操作就會失敗倦淀,因為本地用戶已經(jīng)是tester了蒋畜,而不是最初的自證管理員了,而tester用戶不具有登記用戶的權限撞叽。辦法就是重新認證自證管理員身份姻成。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市愿棋,隨后出現(xiàn)的幾起案子科展,更是在濱河造成了極大的恐慌,老刑警劉巖糠雨,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件才睹,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機琅攘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門真椿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人乎澄,你說我怎么就攤上這事突硝。” “怎么了置济?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵解恰,是天一觀的道長。 經(jīng)常有香客問我浙于,道長护盈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任羞酗,我火速辦了婚禮腐宋,結果婚禮上,老公的妹妹穿的比我還像新娘檀轨。我一直安慰自己胸竞,他們只是感情好,可當我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布参萄。 她就那樣靜靜地躺著卫枝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讹挎。 梳的紋絲不亂的頭發(fā)上校赤,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天,我揣著相機與錄音筒溃,去河邊找鬼马篮。 笑死,一個胖子當著我的面吹牛怜奖,可吹牛的內(nèi)容都是我干的浑测。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼烦周,長吁一口氣:“原來是場噩夢啊……” “哼尽爆!你這毒婦竟也來了?” 一聲冷哼從身側響起读慎,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎槐雾,沒想到半個月后夭委,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年株灸,在試婚紗的時候發(fā)現(xiàn)自己被綠了崇摄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡慌烧,死狀恐怖逐抑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屹蚊,我是刑警寧澤厕氨,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站汹粤,受9級特大地震影響命斧,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嘱兼,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一国葬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芹壕,春花似錦汇四、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斯嚎,卻和暖如春利虫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背堡僻。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工糠惫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钉疫。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓硼讽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親牲阁。 傳聞我的和親對象是個殘疾皇子固阁,可洞房花燭夜當晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)城菊,斷路器备燃,智...
    卡卡羅2017閱讀 134,717評論 18 139
  • 1. 整體概覽# 在Fabric 1.0版本中,原0.6版本中的“Membership Service”已經(jīng)被“F...
    __NeverMore__閱讀 6,481評論 7 17
  • 本文摘自 騰訊bugly 的文章《全站 HTTPS 來了》况褪,內(nèi)容有修改撕贞。 大家在使用百度、谷歌或淘寶的時候测垛,是否注...
    bnotes閱讀 3,659評論 1 9
  • 晚上和兒子一起組裝網(wǎng)購的書柜食侮,雖然老爸一再說号涯,要我等翟大仙回來了再裝,怎奈得我滿滿的自信疙描,面對一堆堆的木頭片片...
    米妞閱讀 196評論 0 0
  • 這世上诚隙,沒有任何美麗可以所向披靡,即使埃及艷后的絕代姿容起胰,可以傾倒羅馬軍隊久又,卻不能讓屋大維動容,但真誠的笑容和發(fā)自...
    程自信閱讀 501評論 4 8