Hyperledger Fabric CA的命令行用法

介绍Hyperledger Fabric CA的命令行方式简单用法

Hyperledger Fabric CA由server和client两部分组成。
设置两个环境变量

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

server的操作主要有两个:

1. 初始化Server服务

在server启动之前,需要至少有一个自我认证的身份存在,这个步骤主要会创建这个自我认证的身份。

${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

命令执行完成后生成如下4个文件:

  1. server配置文件
    ${FABRIC_CA_SERVER_HOME}/fabric-ca-server-config.yaml
  2. server内部存储数据库文件
    ${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,如果需要使用非默认配置文件,只需要通过命令行参数--config指定文件名即可。

另,我们看到server端的主要操作有两步完成,第一步初始化,第二步启动;实际上两步可以合并成一步,即直接执行第二步启动就可以,因为在启动过程中如果发现还没有进行过初始化,那么会自动执行初始化的操作;那为什么需要分成两步呢,因为初始化完成之后用户可能需要对配置文件进行修改,调整参数和配置,然后在启动,而如果直接执行第二步就没有机会修改和调整配置了。

启动完之后可以发送如下命令检查时候工作正常

$ 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启动的时候就内置进去的;后面的很多操作都需要管理员的身份,所以这一步先要获取管理员的身份资格,才能往下操作,比如添加新的角色身份,添加新的管理员等等。

${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进行修改。

命令执行完之后生成如下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端数据库的变化,可以看到表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的内容就是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参数必须是是server端配置文件fabric-ca-server-config.yaml里hf.Registrar.Roles属性值里的一个。
  • --id.affiliation参数表示被注册对象的从属关系参数一定要归属于预先配置的组织属性。换句话说,被注册对象的affiliation参数一定要是预先配置的affiliation参数的一个前缀。例如,假设预先配置的组织关系为:“a.b.c”,那么新注册的对象的affiliation属性可以是“a.b.c”,也可以是“a.b”,但“a.c”就不能通过注册。

再看server端数据库的变化,可以看到表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端数据库的变化,和自证管理员身份认证一样,会往certificates表里面插入一条数据,其内容是对应角色的证书信息。

6. 总结登记(register)和认证(enroll)的功能

总结起来,登记身份和认证身份分别完成的功能是:

  1. 登记身份用来登记一个身份
    它需要提供待登记身份的身份信息,包含用户名,密码,类型,组织关系,等属性。
    实施登记的人,还需要有登记的权限,例如初始的自证管理员,或其他管理员身份。
    登记过程不会生成本地文件,但是会往server的数据库表users中插入一条数据。
  2. 认证身份用来认证一个前面已经登记过的身份
    它需要提供登记时身份的名字和密码;实施认证不需要认证的权利。
    认证过程会生成本地文件,包括client配置文件,client证书文件,client私钥文件,和根证书文件。
    同时在server端会把client的证书写入数据库表certificates中。

这也就是client三个步骤里面,第一步就需要做自证管理员身份的认证操作,因为此时客户端没有任何证书身份信息,只有自证管理员的名字和密码,可以完成自证管理员的认证操作;完成后本地就有自证管理员的身份信息包括证书文件,私钥;有了这些信息,才可以操作接下来的登记其他身份操作,因为登记一个身份需要具有登记权限的人才能做,既然刚才已经完成了自证管理员的认证操作,那么本地身份就是自证管理员,因此可以以自证管理员身份进行其他的登记操作。

另外要注意的是,在认证身份的时候会把之前已经存在的所有配置文件(包括client配置文件,client证书文件,client私钥文件,根证书文件)都重新写掉,文档上说可以通过命令行指定不同的文件名,但是经过试验好像不灵,不知道这是我使用上的问题,还是程序bug。所以在我们例子中当完成用户tester的认证之后,本地的证书信息就被覆盖成tester的了,此时再进行用户登记操作就会失败,因为本地用户已经是tester了,而不是最初的自证管理员了,而tester用户不具有登记用户的权限。办法就是重新认证自证管理员身份。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • 1. 整体概览# 在Fabric 1.0版本中,原0.6版本中的“Membership Service”已经被“F...
    __NeverMore__阅读 6,381评论 7 17
  • 本文摘自 腾讯bugly 的文章《全站 HTTPS 来了》,内容有修改。 大家在使用百度、谷歌或淘宝的时候,是否注...
    bnotes阅读 3,580评论 1 9
  • 晚上和儿子一起组装网购的书柜,虽然老爸一再说,要我等翟大仙回来了再装,怎奈得我满满的自信,面对一堆堆的木头片片...
    米妞阅读 172评论 0 0
  • 这世上,没有任何美丽可以所向披靡,即使埃及艳后的绝代姿容,可以倾倒罗马军队,却不能让屋大维动容,但真诚的笑容和发自...
    程自信阅读 453评论 4 8