一:简介

在e2e_cli的例子中,所有用到的证书和私钥都是由cryptogen这个工具根据crypto-config.yaml而生成的。但是在实际的生产环境中,我们需要给每个org都建立自己的CA,用来管理本org的用户。所以需要部署ca server和client去进行操作。本文就是进行fabric CA的知识点整理。Fabric CA的整体结构如下所示:

从图中可以知道:和ca server进行交互可以通过两种途径,fabric-CA-client和SDK。所有和fabric CA server进行交互都是通过调用REST APIs进行操作的。

Hyperledger Fabric CA客户端或SDK可能连接到Hyperledger Fabric CA服务器集群时。 这在图的右上部分中说明。 客户端路由到HA代理端点,该端点将流量负载平衡到fabric-ca-server集群成员之一。

集群中的所有Hyperledger Fabric CA服务器都共享相同的数据库以跟踪身份和证书。 如果配置了LDAP,则身份信息将保存在LDAP中而不是数据库中。

一台服务器可能包含多个CA。 每个CA都是根CA或中间CA. 每个中间CA都有一个父CA,它是根CA或另一个中间CA.

二:使用(命令)

(1) 准备

   需要下载fabric ca server和fabric ca client的可执行文件,然后将其放到/opt/gopath/bin的路径下面。

可以通过两种方式:

 1:自己编译:

$ go get -u github.com/hyperledger/fabric-ca

$ cd $GOPATH/src/github.com/hyperledger/fabric-ca

$ make fabric-ca-server

$ make fabric-ca-client

$ ls bin/fabric-ca-client  fabric-ca-server

 2:直接下载

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

(2) 启动server

fabric-ca-server start -b admin:adminpw

-b选项为引导管理员提供注册ID和密码; 如果LDAP未启用“ldap.enabled”设置,则这是必需的。如果服务器以前没有被初始化,它将在第一次启动时自行初始化。 在初始化期间,如果服务器尚不存在,服务器将生成ca-cert.pem和ca-key.pem文件,并且如果该文件不存在,还会创建一个默认配置文件。

启动Fabric CA服务器至少需要一个引导程序标识; 这个身份是服务器管理员(admin:adminpw)。如果没有指定--ca.certfile和--ca.keyfile 参数,那么生成的证书和私钥是自签的。

除非Fabric CA服务器配置为使用LDAP,否则必须至少配置一个预先注册的引导身份identity,以便您注册和注册其他身份identity。 -b选项指定引导身份的名称和密码。

如果不想自签,使用自己准备的证书和密钥,可以通过下面三种方式进行指定。

    1:配置文件

如果需要CSR的自定义值,则可以自定义配置文件,修改ca.certfile和ca.keyfile配置项指定的文件,然后再次运行fabric-ca-server init -b admin:adminpw命令。

    2:命令行

fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${PRIVATE_KEY} -b admin:adminpw -d

Fabric CA Server启动的时候,带了3个重要的参数:ca.certfile 指定了CA的根证书,ca.keyfile 指定了接下来给新用户签发证书时的私钥。另外就是-b参数,指定了CA Client连接CA Server时使用的用户名密码。其中证书和密钥两个文件都必须是PEM编码的,并且不得加密。更具体地说,CA证书文件的内容必须以----- BEGIN CERTIFICATE -----开头,并且密钥文件的内容必须以----- BEGIN PRIVATE KEY -----开头,而不是-----开始加密私钥-----。

     3:镜像

             docker-compose.yaml文件中的 command: sh -c 'fabric-ca-server start -b admin:adminpw'命令行修改为 fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/${PRIVATE_KEY} -b admin:adminpw -d

(3) 启动client然后生成管理员的证书和私钥

通过调用在7054端口本地运行的Fabric CA服务器来登录其标识为admin且密码为adminpw的标识。也是管理员身份。

export FABRIC_CA_CLIENT_HOME=$HOME/ca

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

登记命令,会在fabric CA 客户端的msp目录的子目录中存储注册证书(ECert),相应的私钥和CA证书链PEM文件。

(openssl verify -CAfile localhost-7054.pem localhost-7054.pem验证是否是自签名证书:localhost-7054.pem: OK)

(4) 用管理员身份签其他用户

我们用该管理员身份去注册一个普通的user用户名为devun,属于org1.department1联盟:

fabric-ca-client register --id.name devin --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'

2017/09/05 22:20:41 [INFO] User provided config file: /home/studyzy/ca/fabric-ca-client-config.yaml

2017/09/05 22:20:41 [INFO] Configuration file location: /home/studyzy/ca/fabric-ca-client-config.yaml

Password: GOuMzkcGgGzq

我们拿到这个密码以后就可以再次使用enroll命令,给devin这个用户生成msp的私钥和证书:

fabric-ca-client enroll -u http://devin:GOuMzkcGgGzq@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/devinmsp

现在新用户devin的私钥和证书就在$HOME/ca/devinmsp目录下,我们可以使用tree命令查看一下:

devinmsp/

├── cacerts

│   └── localhost-7054.pem

├── keystore

│   └a044e43ad1fd7cdfd1fd995abaef53895534bd70e8cdfdb665430d12665f2041_sk

└── signcerts

└── cert.pem

  通常,MSP目录的cacerts目录必须包含其他证书颁发机构的证书颁发机构链,表示对等体的所有信任根。

其中这些属性以hf开头的,是需要进行了解的,表示的是用户是否拥有相关的权限:

hf.Registrar.Roles该用户可以增加的新用户类型,用户类型都有:client、orderer、peer、user。

hf.Registrar.DelegateRoles该用户可以设置的新用户的hf.Registrar.Roles属性。

hf.Registrar.Attributes该用户可以为新用户设置的保留属性和自定义属性。

hf.GenCRL该用户是否可以获取CRL列表,已经撤销的证书列表。

hf.Revoker该用户是否能够撤销其它用户。

hf.AffiliationMgr该用户是否可以管理联盟。

hf.IntermediateCA该用户是否可以作为中间CA。

除了这些以hf.开头的属性外,还可以自定义属性,例如下面的admin=true:

(5) 查看联盟以及成员

fabric-ca默认注册了几个联盟,可以用affiliation list查看:

fabric-ca-client affiliation list

affiliation: .

affiliation: org1

affiliation: org1.department1

affiliation: org1.department2

affiliation: org2

affiliation: org2.department1

   添加/删除联盟成员,也是通过这个命令进行:

fabric-ca-client affiliation add another

fabric-ca-client affiliation remove another

可以用fabric-ca-client identity list查看有权限查看的用户的详情

fabric-ca-client identity list

列出已经签的所有的实体

并且进行删除以及修改实体用户。具体参考官方文档。

三:升级

在升级Fabric CA客户端之前,必须升级Fabric CA服务器。 升级之前,建议备份当前数据库:

要升级Fabric CA服务器的单个实例:

停止fabric-ca-server进程。

确保当前数据库已备份。

将之前的fabric-ca-server二进制文件替换为升级版本。

启动fabric-ca-server进程。

使用以下命令验证fabric-ca-server进程是否可用,其中<host>是启动服务器的主机名:

fabric-ca-client getcainfo -u http:// <host>:7054

要使用MySQL或Postgres数据库升级fabric-ca-server实例的集群,请执行以下步骤。 我们假设您正在使用haproxy为host1和host2上的两个fabric-ca-server群集成员(分别在端口7054上侦听)负载均衡。完成此过程后,您将对升级的fabric-ca-server群集成员进行负载平衡 在host3和host4上分别监听端口7054。具体参考官方文档。

四:参考文档

http://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/04/27/hyperledger-fabric-ca-usage.html

https://www.cnblogs.com/studyzy/p/7482451.html

http://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html

Fabric CA的基础知识相关推荐

  1. Hyperledger Fabric基础知识

    文章目录 什么是Hyperledger Fabric? Hyperledger架构是怎么工作的? Hyperledger交易如何执行 总结 Hyperledger Fabric基础知识 本文我们会介绍 ...

  2. python中用str乘方_Python基础知识

    Python2与Python3的区别:  (这里只列举自己总结的几点) Python2: 源码不标准 混乱 重复代码过多 默认使用的编码方式是ASCII码 # 解决对应编码问题 在首行增加 #-*-e ...

  3. 关于计算机的发展过程及基础知识正确的是,2011doc-计算机基础知识.doc

    2011doc-计算机基础知识.doc 一.单选题 (每小题1分) . 计算机中,浮点数由两部分组成,它们是( ). A.整数部分和小数部分?? B.阶码部分和基数部分 C.基数部分和尾数部分?? D ...

  4. 计算机基础知识题库选择题,计算机基础知识篇选择题库

    计算机基础知识篇选择题库 (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 计算机基础知识篇选择题库1.微型计算机的性能指标不包括___ ...

  5. poll和死锁_计算机基础知识

    转自: http://blog.csdn.net/qq_15437629/article/details/52388685 在这里只做备份 计算机网络 TCP/IP 模型 TCP/IP协议集的分层实施 ...

  6. 100个网络基础知识,赶紧收藏吧!

    1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层, ...

  7. 收集100 个网络基础知识

    1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层:物理层,数据链路层,网络层,传输层, ...

  8. 收藏100个网络基础知识

    100 个网络基础知识普及,看完成半个网络高手! 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 ...

  9. 第二十六期:100 个网络基础知识普及,看完成半个网络高手

    本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 作者:佚名来源 本篇文章是关于100个网络基础知识普及,看完成半个网络高手!下面,我们一起来看. 1)什么是链接? 链 ...

  10. 计算机考试的基础知识高考,计算机考试基础知识试题..doc

    计算机考试基础知识试题..doc 1. 下列关于个人计算机的叙述中,错误的是________.A.个人计算机的英文缩写是PC B.个人计算机又称为微机6 G+ }& ]$ R0 `8 OC.世 ...

最新文章

  1. thinkphp实现登录后返回原界面
  2. 宏基因组扩增子2分析流程:中文首发,史上最详系,零基础自学
  3. php 错误记录_PHP中把错误日志保存在系统日志中(Windows系统)
  4. 解决UIScrollView把uitableviewcell的点击事件屏蔽
  5. 轻松地与Java完全集成
  6. jquery attr
  7. Nginx之http配置
  8. python使用pycurl抓取获取12306验证码
  9. vc2008中如何调试dll
  10. 设计模式(4):生成器模式(Builder)
  11. 局域网屏幕共享_使用安卓手机作为树莓派的屏幕或ssh命令行终端
  12. 转 vo、po、dto、bo、pojo、entity、mode如何区分
  13. 2018前端走向全栈,Nodejs快速入门视频教程
  14. [1183]Clickhouse数据表数据分区partition数据生命周期操作
  15. 计算机二级C语言-A程序填空题
  16. SVN的分支是做什么的?
  17. 交错和 (hihocoder)
  18. 英伟达两个最新元宇宙布局
  19. 2023届校招算法岗知识超全总结
  20. 61-Java-分布式开发框架Dubbo

热门文章

  1. html5 图片上传进度条,html5异步上传图片显示上传文件进度条
  2. 物联网技能大赛lora开发
  3. android刷原生rom教程,一加手机谷歌原生Android ROM包刷机教程
  4. 浪潮PM8222-SHBA、RAID 2GB PM8204、RAID 4GB PM8204,阵列卡配置方法
  5. 如何知道计算机是否支持64位,查看CPU是否支持64位操作系统的简单方法
  6. js调用网页打印接口
  7. window系统中hosts文件位置与修改
  8. python制作雕刻软件_Mac动画制作软件——blender for Mac
  9. Flutter 清除应用缓存
  10. 免费pdf转word网页版