陈述
主要讲Fabric核心模块中cryptogen的功能模块相关操作以及配置文件
Cryptogen
cryptogen模块主要用来生成组织结构和账号相关的文件,任何Fabric系统的开发通常都是从cryptogen模块开始的。在Fabric项目中,当系统设计完成之后第一项工作就是根据系统的设计来编写cryptogen的配置文件,然后通过这些配置文件生成相关的证书文件。
Cryptogen模块所使用的配置文件是整个Fabric项目的基石。
Cryptogen模块所使用的配置文件是整个Fabric项目的基石。
Cryptogen模块所使用的配置文件是整个Fabric项目的基石。
Cryptogen模块命令
cryptogen模块是通过命令行的方式运行的,一个cryptogen命令由命令行参数和配置文件两部分组成,通过执行命令cryptogen --help
可以显示cryptogen模块的命令行选项,执行结果如下所示:
$ cryptogen --help
usage: cryptogen [<flags>] <command> [<args> ...]
Utility for generating Hyperledger Fabric key material
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
Commands:
# 显示帮助信息
`help [<command>...]
# 根据配置文件生成证书信息。
`generate [<flags>]
# 显示系统默认的cryptogen模块配置文件信息
`showtemplate
# 显示当前模块版本号
`version`
# 扩展现有网络
`extend [<flags>]
Cryptogen模块配置文件
Cryptogen模块的配置文件用来描述需要生成的证书文件的特性,比如:有多少个组织有多少个节点,需要多少个账号等。这里我们通过一个cryptogen模块配置文件的具体例子来初步了解配置文件的结构,该例子是Fabric源代码中自带的示例 - crypto-config.yaml:
这个配置文件的名字可以根据自己的意愿进行自定义, 即: xxx.yaml
OrdererOrgs: # 排序节点的组织定义
- Name: Orderer # orderer节点的名称
Domain: example.com # orderer节点的根域名
Specs:
- Hostname: orderer # orderer节点的主机名
PeerOrgs: # peer节点的组织定义
- Name: Org1 # 组织1的名称
Domain: org1.example.com # 组织1的根域名
EnableNodeOUs: true # 是否支持node.js
Template:
Count: 2 # 组织1中的节点(peer)数目
Users:
Count: 1 # 组织1中的用户数目
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
说明:
上述模板文件定义了一个orderer节点,这个orderer节点的名字为orderer,orderer节点的根域名为example.com,主机名为orderer。模板文件同时定义了两个组织,两个组织的名字分别为org1 和 org2,其中组织 org1 包含了2个节点和1个用户,组织 org2 包含2个点和1个用户。
除了Fabric源码中提供的例子,还可以通过命令cryptogen showtemplate
获取默认的模板文件,在实际项目中稍加修改这些默认的模板文件即可使用。
生成证书文件
在任意目录下创建一个新的目录如: MyTestNetWork, 在该目录下左如下操作:
- 编写yaml配置文件 - crypto-config.yaml
- 一个排序节点: orader
- 根域名:ydqy.com
- 两个组织: java, go
- go
- peer节点数: 3个
- 用户个数: 2个
- 根域名:go.ydqy.com
- java
- peer节点数: 3个
- 用户个数: 2个
- 根域名: java.ydqy.com
命令
# 根据默认模板在对应目录下生成证书
$ cryptogen generate
# 根据指定的模板在指定目录下生成证书
$ cryptogen generate --config=./crycrypto-config.yaml --output ./crypto-config
--config: 指定配置文件
--output: 指定证书文件的存储位置, 可以不指定。会在对应路径生成目录,默认名字为:crypto-config
Fabric证书文件结构
-
orderer节点
# 查看TestNetWork目录 ydqy@ubuntu:~/TestNetWork$ tree -L 2 . ├── crypto-config │ ├── ordererOrganizations # orderer节点相关的证书文件 │ └── peerOrganizations # 组织相关的证书文件(组织的节点数, 用户数等证书文件) └── crypto-config.yaml # 配置文件 # 查看排序节点的证书目录, 进入到 ordererOrganizations 子目录中 ydqy@ubuntu:ordererOrganizations$ tree -L 4 . └── ydqy.com # 根域名为ydqy.com的orderer节点的相关证书文件 ├── ca # CA服务器的签名文件 │ ├── 94db924d3be00c5adda6ac3c3cb7a5f8b80868681c3dd04b58c2920cdf56fdc7_sk │ └── ca.ydqy.com-cert.pem ├── msp │ ├── admincerts # orderer管理员的证书 │ │ └── [email protected] │ ├── cacerts # orderer根域名服务器的签名证书 │ │ └── ca.ydqy.com-cert.pem │ └── tlscacerts # tls连接用的身份证书 │ └── tlsca.ydqy.com-cert.pem ├── orderers # orderer节点需要的相关的证书文件 │ └── ubuntu.ydqy.com │ ├── msp # orderer节点相关证书 │ └── tls # orderer节点和其他节点连接用的身份证书 ├── tlsca │ ├── de45aeb112ee820197f7d4d475f2edbeb1705d53a690f3537dd794b66de1d6ba_sk │ └── tlsca.ydqy.com-cert.pem └── users # orderer节点用户相关的证书 └── [email protected] ├── msp └── tls
在实际开发中orderer节点这些证书其实不需要直接使用, 只是在orderer节点启动时指明项目的位置即可。
-
Peer节点
进入到 peerOrganizations 子目录中, 我们详细介绍这些证书的种类和作用。由于每个组织的目录结构都是一样的, 所以我们只对其中一个组织的目录进行详细介绍。
# 查看 peerOrganizations 子目录中内容 ydqy@ubuntu:peerOrganizations$ tree -L 1 . ├── go.ydqy.com # go组织 └── java.ydqy.com # java组织 # 进入go.ydqy.com 组织目录中 ydqy@ubuntu:go.ydqy.com$ tree -L 4 . ├── ca # 根节点签名证书 │ ├── 4a367bf9e43142846e7c851830f69f72483ecb7a6def7c782278a9808bbb5fb0_sk │ └── ca.go.ydqy.com-cert.pem ├── msp │ ├── admincerts # 组织管理员的证书 │ │ └── [email protected] │ ├── cacerts # 组织的根证书 │ │ └── ca.go.ydqy.com-cert.pem │ ├── config.yaml │ └── tlscacerts # TLS连接身份证书 │ └── tlsca.go.ydqy.com-cert.pem ├── peers │ ├── peer0.go.ydqy.com │ │ ├── msp │ │ │ ├── admincerts # 组织的管理证书, 创建通道必须要有该证书 │ │ │ ├── cacerts # 组织根证书 │ │ │ ├── config.yaml │ │ │ ├── keystore # 当前节点的私钥 │ │ │ ├── signcerts # 当前节点签名的数字证书 │ │ │ └── tlscacerts # tls连接的身份证书 │ │ └── tls │ │ ├── ca.crt # 组织的根证书 │ │ ├── server.crt # 验证本节点签名的证书 │ │ └── server.key # 当前节点的私钥 │ ├── peer1.go.ydqy.com │ │ ├── msp │ │ │ ├── admincerts │ │ │ ├── cacerts │ │ │ ├── config.yaml │ │ │ ├── keystore │ │ │ ├── signcerts │ │ │ └── tlscacerts │ │ └── tls │ │ ├── ca.crt │ │ ├── server.crt │ │ └── server.key │ └── peer2.go.ydqy.com │ ├── msp │ │ ├── admincerts │ │ ├── cacerts │ │ ├── config.yaml │ │ ├── keystore │ │ ├── signcerts │ │ └── tlscacerts │ └── tls │ ├── ca.crt │ ├── server.crt │ └── server.key ├── tlsca │ ├── 3273887b1da2f27a6cbad3ac4acb0379df3d7858e0553a91fb9acb93da50b670_sk │ └── tlsca.go.ydqy.com-cert.pem └── users ├── [email protected] │ ├── msp │ │ ├── admincerts # 组织的根证书, 作为管理身份的验证 │ │ ├── cacerts # 用户所属组织的根证书 │ │ ├── keystore # 用户私钥 │ │ ├── signcerts # 用户的签名证书 │ │ └── tlscacerts # tls连接通信证书, sdk客户端使用 │ └── tls │ ├── ca.crt # 组织的根证书 │ ├── client.crt # 客户端身份的证书 │ └── client.key # 客户端的私钥 ├── [email protected] │ ├── msp │ │ ├── admincerts │ │ ├── cacerts │ │ ├── keystore │ │ ├── signcerts │ │ └── tlscacerts │ └── tls │ ├── ca.crt │ ├── client.crt │ └── client.key └── [email protected] ├── msp │ ├── admincerts │ ├── cacerts │ ├── keystore │ ├── signcerts │ └── tlscacerts └── tls ├── ca.crt ├── client.crt └── client.key