菜鸟系列Fabric —— Fabric-CA
1.Fabric-CA简介
Fabric 设计中考虑了三种类型的证书:登记证书(Enrollment Certificate)、交易证书(Transaction Certificate),以及保障通信链路安全的 TLS 证书。证书的默认签名算法为 ECDSA,Hash 算法为 SHA-256。
- 登记证书(ECert):颁发给提供了注册凭证的用户或节点等实体,代表网络中身份。一般长期有效。
- 交易证书(TCert):颁发给用户,控制每个交易的权限,不同交易可以不同,实现匿名性。短期有效。
- 通信证书(TLSCert):控制对网络层的接入访问,可以对远端实体身份进行校验,防止窃听。
目前,在实现上,主要通过 ECert 来对实体身份进行检验,通过检查签名来实现权限管理。TCert 功能暂未实现,用户可以使用 idemix 机制来实现部分匿名性。
而Fabric CA是超级账本的数字证书认证中心,它提供了如下功能:
- 用户信息的注册
- 数字证书的发行
- 数字证书的延期与吊销
并且,Fabric CA服务端提供了RESTful的接口供客户端工具和HFC SDK访问。
在fabric中,节点需要以下证书。
.
├── msp
│ ├── admincerts
│ │ └── Admin@org1.example.com-cert.pem
│ ├── cacerts
│ │ └── ca.org1.example.com-cert.pem
│ ├── config.yaml
│ ├── keystore
│ │ └── 648c7f8bcbf86557bc472bd638c7b1b126c48697c1e806e53dca16dd0f125014_sk
│ ├── signcerts
│ │ └── peer0.org1.example.com-cert.pem
│ └── tlscacerts
│ └── tlsca.org1.example.com-cert.pem
└── tls
├── ca.crt
├── server.crt
└── server.key
2. 使用Fabric CA
2.1 准备
- 克隆仓库
git clone https://github.com/hyperledger/fabric-ca.git
- 切换分支
git checkout v1.4.3
- make客户端/服务端
cd fabric-ca
make fabric-ca-server
make fabric-ca-client
- 启动fabric-ca-server
此处采取docker启动,可以参考fabric-sample/first-network/docker-compose-cli-ca.yaml
docker-compose -f docker-compose-cli-ca.yaml up -d ca0
或者命令行启动
fabric-ca-server init -b admin:adminpw
fabric-ca-server start -b admin:adminpw
2.2 操作
主要通过调用Fabric CA的客户端来测试Fabric相关功能。对外提供的接口如下:
enroll:登记账号
gencrl:撤销证书
gencsr:创建证书签名
cainfo:获取CA信息
reenroll:重新登记账号
register:注册一个新账号
revoke:撤销一个账号
version:显示版本信息
fabric-ca-client 提供的操作命令如下:
➜ fabric-ca git:(4af7a27) ✗ ./bin/fabric-ca-client --help
Hyperledger Fabric Certificate Authority Client
Usage:
fabric-ca-client [command]
Available Commands:
affiliation Manage affiliations
certificate Manage certificates
enroll Enroll an identity
gencrl Generate a CRL
gencsr Generate a CSR
getcainfo Get CA certificate chain and Idemix public key
identity Manage identities
reenroll Reenroll an identity
register Register an identity
revoke Revoke an identity
version Prints Fabric CA Client version
2.2.1 获取CA信息
- 操作命令
fabric-ca-client getcainfo -u http://admin:adminpw@localhost:7054
- 结果
2020/02/19 11:31:23 [INFO] Configuration file location: /Users/eggsy/.fabric-ca-client/fabric-ca-client-config.yaml
2020/02/19 11:31:23 [INFO] Stored root CA certificate at /Users/eggsy/.fabric-ca-client/msp/cacerts/localhost-7054.pem
2020/02/19 11:31:23 [INFO] Stored Issuer public key at /Users/eggsy/.fabric-ca-client/msp/IssuerPublicKey
2020/02/19 11:31:23 [INFO] Stored Issuer revocation public key at /Users/eggsy/.fabric-ca-client/msp/IssuerRevocationPublicKey
2.2.2 登记用户
- 操作命令
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
- 结果
2020/02/19 11:14:48 [INFO] generating key: &{A:ecdsa S:256}
2020/02/19 11:14:48 [INFO] encoded CSR
2020/02/19 11:14:48 [INFO] Stored client certificate at /Users/eggsy/.fabric-ca-client/msp/signcerts/cert.pem
2020/02/19 11:14:48 [INFO] Stored root CA certificate at /Users/eggsy/.fabric-ca-client/msp/cacerts/localhost-7054.pem
2020/02/19 11:14:48 [INFO] Stored Issuer public key at /Users/eggsy/.fabric-ca-client/msp/IssuerPublicKey
2020/02/19 11:14:48 [INFO] Stored Issuer revocation public key at /Users/eggsy/.fabric-ca-client/msp/IssuerRevocationPublicKey
enroll 命令访问指定的 Fabric-CA 服务,采用 admin 用户进行注册。 在 Fabric-CA 客户端主目录下创建配置文件 fabric-ca-clien-config.yaml 和 msp 子目录,存储注册证书(ECert),相应的私钥和 CA 证书 PEM 文件。
├── fabric-ca-client-config.yaml
└── msp
├── IssuerPublicKey
├── IssuerRevocationPublicKey
├── cacerts
│ └── localhost-7054.pem
├── keystore
│ └── e8de7b1d9545ccdb7f1b98e7304f80c31f804fe48e0fa79f64f4056df427f4f1_sk
├── signcerts
│ └── cert.pem
└── user
2.2.3 注册用户
admin用户是enroll成功的,接下来用admin作为登记员(Register)来注册(register)一个新用户。
- 操作命令
fabric-ca-client register --id.name Eric --id.type user --id.affiliation org1.department1 --id.attrs 'hf.Revoker=true,foo=bar'
- 结果
2020/02/19 14:12:17 [INFO] Configuration file location: /Users/eggsy/.fabric-ca-client/fabric-ca-client-config.yaml
Password: axZEySLKDchv
2.3 生成peer/orderer节点msp/tls信息
创建fabric-ca-client配置文件环境变量:
export FABRIC_CA_CLIENT_HOME=/etc/hyperledger/fabric-ca-client
创建fabric-ca-client-msp配置文件路径:
mkdir -p /etc/hyperledger/fabric-ca-client
从fabric-ca源码中复制fabric-ca客户端配置文件:
cp $GOPATH/src/github.com/hyperledger/fabric-ca/testdata/fabric-ca-client-config.yaml /etc/hyperledger/fabric-ca-client
登记admin用户
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
2.3.1 msp信息
注册ordere节点
fabric-ca-client register --id.name orderer --id.type orderer --id.affiliation org1.department1 --id.secret orderer-password
注册peer节点
fabric-ca-client register --id.name peer --id.type peer --id.affiliation org1.department1 --id.secret peer-password
登记orderer节点
fabric-ca-client enroll -u http://orderer:orderer-password@localhost:7054 -c fabric-ca-client-config-orderer.yaml -M $FABRIC_CA_CLIENT_HOME/orderer/msp
登记peer节点
fabric-ca-client enroll -u http://peer:peer-password@localhost:7054 -c fabric-ca-client-config-peer.yaml -M $FABRIC_CA_CLIENT_HOME/peer/msp
查看文件目录
orderer
└── msp
├── IssuerPublicKey
├── IssuerRevocationPublicKey
├── cacerts
│ └── localhost-7054.pem
├── keystore
│ └── f2e22f79d62e472ec8d2411fc68e0ad3e04bbc90cd790844a3d7b94eff7c87c4_sk
├── signcerts
│ └── cert.pem
└── user
peer
└── msp
├── IssuerPublicKey
├── IssuerRevocationPublicKey
├── cacerts
│ └── localhost-7054.pem
├── keystore
│ ├── 19ddee56c9329bbee0ba2fc3c3ca8c87c1d774921d898fa6d701e0a1f98fc92e_sk
│ └── c35641cd14d0b73e80d057c37a0568c78c474a22af5993b642f2c8312549e824_sk
├── signcerts
│ └── cert.pem
└── user
2.3.2 tls信息
注册ordere节点
fabric-ca-client register --id.name orderer --id.type orderer --id.affiliation org1.department1 --id.secret orderer-password
注册peer节点
fabric-ca-client register --id.name peer --id.type peer --id.affiliation org1.department1 --id.secret peer-password
登记orderer节点
fabric-ca-client enroll -d --enrollment.profile tls -u http://orderer:orderer-password@localhost:7054 -c fabric-ca-client-config-orderer.yaml -M $FABRIC_CA_CLIENT_HOME/orderer/tls
登记peer节点
fabric-ca-client enroll -d --enrollment.profile tls -u http://peer:peer-password@localhost:7054 -c fabric-ca-client-config-peer.yaml -M $FABRIC_CA_CLIENT_HOME/peer/tls
查看文件目录
├── orderer
│ ├── msp
│ │ ├── IssuerPublicKey
│ │ ├── IssuerRevocationPublicKey
│ │ ├── cacerts
│ │ │ └── localhost-7054.pem
│ │ ├── keystore
│ │ │ └── f2e22f79d62e472ec8d2411fc68e0ad3e04bbc90cd790844a3d7b94eff7c87c4_sk
│ │ ├── signcerts
│ │ │ └── cert.pem
│ │ └── user
│ └── tls
│ ├── IssuerPublicKey
│ ├── IssuerRevocationPublicKey
│ ├── cacerts
│ ├── keystore
│ │ └── ea475ad15a721a7657d987474089e5ed609274e5e52147035cda93aac00ad5a2_sk
│ ├── signcerts
│ │ └── cert.pem
│ ├── tlscacerts
│ │ └── tls-localhost-7054.pem
│ └── user
└── peer
├── msp
│ ├── IssuerPublicKey
│ ├── IssuerRevocationPublicKey
│ ├── cacerts
│ │ └── localhost-7054.pem
│ ├── keystore
│ │ ├── 19ddee56c9329bbee0ba2fc3c3ca8c87c1d774921d898fa6d701e0a1f98fc92e_sk
│ │ └── c35641cd14d0b73e80d057c37a0568c78c474a22af5993b642f2c8312549e824_sk
│ ├── signcerts
│ │ └── cert.pem
│ └── user
└── tls
├── IssuerPublicKey
├── IssuerRevocationPublicKey
├── cacerts
├── keystore
│ └── c0cbf324a6da6ee7aded979c0a0ada3377cb26054c34c73d19ab809518f71d46_sk
├── signcerts
│ └── cert.pem
├── tlscacerts
│ └── tls-localhost-7054.pem
└── user
原文地址:https://www.cnblogs.com/jiliguo/p/12331347.html
- [Golang软件推荐] RSA公私钥加解密(解决Golang私钥加密公钥解密问题)
- [喵咪大数据]Hive+Hbase关联
- 再战子域共享Cookie问题
- [喵咪大数据]Presto查询引擎
- 如何在5分钟内做出你的第一个开源贡献
- [喵咪大数据]HUE大数据管理工具
- Dubbo源码解析 —— Zookeeper 订阅
- 注册中心 Eureka 源码解析 —— 项目结构简介
- 【平台】Seldon.io发布新开源平台,用于Kubernetes上的机器学习
- 分布式事务 TCC-Transaction 源码分析 —— TCC 实现
- 了解学习速率以及它如何提高深度学习的表现
- 分布式消息队列 RocketMQ源码解析:事务消息
- WordPress用Windows主机设置伪静态方法
- PHP页面跳转代码
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 布隆过滤器与缓存击穿
- spring之通过注解方式配置Bean(二)
- 【python-leetcode103-树的宽度遍历】二叉树的锯齿形层次遍历
- 图卷积网络(GCN)python实现
- hadoop伪分布式之配置yarn并运行MR程序(WordCount)
- 【python-leetcode637-树的宽度遍历】二叉树的层平均值
- graphSAGE的python实现
- 【python-leetcode111-树的宽度遍历】二叉树的最小深度
- 基于TypeScript封装Axios笔记(四)
- spring之泛型依赖注入
- 【python-leetcode113-树的深度遍历】路径总和Ⅱ
- spring之为什么要使用AOP(面向切面编程)?
- useContext更佳实践
- 【论文笔记】张航和李沐等提出:ResNeSt: Split-Attention Networks(ResNet改进版本)
- [前端]GOFLY项目-响应式登录页的设计和实现