fabric1.0之cryptogen讲解

一 工具定义

Cryptogen是hyperleder fabric提供的为网络实体生成加密材料(公私钥/证书等)的实用程序。简单来说就是一个生成认证证书(x509 certs)的工具。这些证书代表一个身份,并允许在网络实体间通信和交易时进行签名和身份认证。

cryptogen使用一个包含网络拓扑的crypto-config.yaml文件,为文件中定义的组织和属于这些组织的实体生成一组证书和密钥。每个组织都配置唯一的根证书(ca-cert),并包含了特定的实体(peer和orders),这就形成了一种典型的网络结构–每个成员都有所属杜CA。hyperleder fabric网络中的交易和通信都使用实体私钥签名,使用公钥验证。

二 产生这个工具的原因
Cryptogen 全名 crypto generate ,fabric设计它是为了方便生产证书,目录这一系列的操作,它脱胎于go sdk下cryto包。

三 如何使用这个工具

在fabric中输入make cryptogen 或者直接在fabric/common/tools/cryptogen/下执行go build,就会在build/bin文件下生成一个名叫cryptogen的二进制程序。

这个工具用来读取crypto-config.yaml文件的内容来产生组织,证书,秘钥。

比如命令为:
cryptogen generate --config=./crypto-config.yaml --output ./crypto-config
理解就是 用cryptogen二进制程序 找到配置文件crypto-config.yaml 处理输出文件名为crypto-config的结果

但是crypto-config中只定义了组织相关的配置,实际需要用的生成证书,以及公私钥的配置在Fabric/common/tools/cryptogen下。

四 工具源码分析

该文件下目录
在这里插入图片描述

在源码上设计者将这个工具概念分成了4个部分:

CA 电子证书

csp 内容安全策略

metadata 元数据

msp 管理服务提供商

CA文件包分析:

Generator.go

该代码定义1个结构体,5个方法

1结构体 CA

电子签名证书 由名称 公私钥 证书构成

2方法 NewCA (baseDir, org, name string) (*CA, error)
作用创建CA 返回CA实体和报错

3方法 (ca *CA) SignCertificate(baseDir, name string, sans []string, pub *ecdsa.PublicKey, ku x509.KeyUsage, eku []x509.ExtKeyUsage) (*x509.Certificate, error)
作用签名证书 返回证书文件和报错

4方法genCertificateECDSA(baseDir, name string, template, parent *x509.Certificate, pub *ecdsa.PublicKey, priv interface{}) (*x509.Certificate, error)
将签名证书椭圆算法处理

5方法 x509Template() x509.Certificate

6方法 subjectTemplate() pkix.Name

ca文件
Generator.go
package ca

import ( //大量运行go sdk里的包
“crypto” //特别是crypto
“crypto/ecdsa”
“crypto/rand”
“crypto/x509”
“crypto/x509/pkix”
“encoding/pem”
“math/big”
“os”
“time”
“path/filepath” //引用fabric中自己写的csp包
“github.com/hyperledger/fabric/common/tools/cryptogen/csp”
)

type CA struct { //定义CA结构体 名称 秘钥 证书
Name string
//SignKey *ecdsa.PrivateKey
//这里2属性都是go sdk中的东西
Signer crypto.Signer //这里是结构体接口 里面是公钥 私钥
SignCert *x509.Certificate //结构体 证书
}

//NewCA 创建CA实例 并将签名密钥对保存在baseDir/名称
func NewCA(baseDir, org, name string) (*CA, error) {

var response error //用来记录错误
var ca *CA // 指向CA结构体

err := os.MkdirAll(baseDir, 0755) //在baseDir路径下创建文件目录
if err == nil { //目录创建成功
priv, signer, err := csp.GeneratePrivateKey(baseDir) //创建私钥priv,signer
response = err //记录报错
if err == nil { //私钥创建成功
// get public signing certificate
ecPubKey, err := csp.GetECPublicKey(priv) //通过私钥priv获取公钥ecpubkey
response = err //记录报错
if err == nil { //公钥创建成功
template := x509Template() //定义模板
//this is a CA
template.IsCA = true //模板属性isCA为true
//模板属性keyUsage
template.KeyUsage |= x509.KeyUsageDigitalSignature |
x509.KeyUsageKeyEncipherment | x509.KeyUsageCertSign |
x509.Ke

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值