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:[email protected]: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:[email protected]:7054
or
${FABRIC_CA_CLIENT_HOME}/fabric-ca-client enroll -u http://tester02:[email protected]: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用户不具有登记用户的权限。办法就是重新认证自证管理员身份。

作者:CodeGeek
链接:https://www.jianshu.com/p/2159f9043102
來源:简书

转自:https://www.jianshu.com/p/2159f9043102

原文地址:https://www.cnblogs.com/zhangmingcheng/p/9111845.html

时间: 2024-08-15 18:06:12

Hyperledger Fabric CA的命令行用法的相关文章

memcache命令行用法

(转)Memcache 的命令行用法 1.启动Memcache 常用参数    memcached 1.4.3     -p <num>      设置端口号(默认不设置为: 11211)     -U <num>      UDP监听端口 (默认: 11211, 0 时关闭)     -l <ip_addr> 绑定地址 (默认:所有都允许,无论内外网或者本机更换IP,有安全隐患,若设置为127.0.0.1就只能本机访问)     -d            独立进程运

Hyperledger Fabric CA User’s Guide——概述(二)

概述 下面的图表说明了如何将Hyperledger Fabric CA与总体的Hyperledger Fabric结构相匹配. 有两种方式与一种Hyperledger Fabric CA服务器进行交互:通过Hyperledger Fabric CA的客户端或通过任意一种Fabric的SDKs.所有与Hyperledger Fabric CA服务器的通信都是通过REST api进行的.有关这些REST api的swagger文档,请参见fabric-ca/swagger/swagger-fabri

Openssl命令行用法简介

去年推出的一些文章中曾介绍过使用openssl命令行完成SHA1.DES.RSA等运算的方法.但其实openssl支持的加解密.签名验签.摘要算法远不止这些.根据不同的应用场景,用户可以自行选择需要的功能.本期介绍如何查阅openssl指令用法.第一步:查看openssl支持哪些算法指令命令行输入openssl --help回车可见图1所示,列出了包括签名验签.证书操作.摘要运算.加解密运算等相关指令.图1第二步:查看某一具体指令用法我们以aes-128-ecb指令为例进行说明.该指令可以实现对

php命令行用法简介

Php是一个非常流行的web服务端脚本语言.其实,php不仅仅可以在web服务器中充当重要角色.在命令行一样可以执行. 本文中,笔者为各位介绍下php在命令行中的使用方法. 1.  查看php的版本.配置 在命令行中输入php –v 即可查看当前php的版本. Java代码   PHP 5.2.17(cli) (built: Feb  2 2011 11:19:21) Copyright (c) 1997-2010 The PHP Group Zend Engine v2.2.0, Copyri

adb logcat 命令行用法

本文为转载.   作者 :万境绝尘  转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 adb logcat --help 命令, 就可以显示该命令的帮助信息; [plain] view plaincopy [email protected]:~$ adb logcat --help Usage: logcat [options] [filterspecs] opti

都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法

前几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: ll /system/bin/asla* 经查,我的android4.4.2+linux3.10  的系统支持如下 alsa cmd -rwxr-xr-x root     shell       68242 2014-10-08 05:18 alsa_amixer -rwxr-xr-x root  

嵌入式linux/android alsa_aplay alsa_amixer命令行用法

几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: ll /system/bin/asla* 经查,我的android4.4.2+linux3.10  的系统支持如下 alsa cmd -rwxr-xr-x root     shell       68242 2014-10-08 05:18 alsa_amixer-rwxr-xr-x root    

npm与cnpm的用法,git命令行用法

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; text-align: justify; font: 12.0px "Helvetica Neue"; color: #454545 } p.p3 { margin: 0.0p

OpenSSL的命令行用法,以及参数大全

c:\openssl\bin>opensslOpenSSL> versionOpenSSL 1.0.2j 26 Sep 2016OpenSSL> https://wiki.openssl.org/index.php/Command_Line_Utilities 官方的安装手册: https://github.com/openssl/openssl/blob/master/INSTALL