cryptogen模块主要是用来生成组织结构和账号的文件,任何Fabric系统的开发通常都是从cryptogen模块开始的。在Fabric项目中,当系统设计完成后的第一项工作就是根据系统设计编写cryptogen的配置文件,然后通过这些配置文件生成相关的证书文件。cryptogen模块所生成的配置文件是Fabric项目的基石。
1.cryptogen模块命令说明
cryptogen模块是通过命令行的方式运行的,一个cryptogen命令由命令行参数和配置文件组成,通过执行命令cryptogen --help可以显示cryptogen模块的命令选项,下面是执行结果:
usage: cryptogen [] [ ...]
Utility for generating Hyperledger Fabric key material
Flags:
--help Show context-sensitive help (also try --help-long and --help-man).
Commands:
help [...]
Show help.
generate []
Generate key material
showtemplate
Show the default configuration template
version
Show version information
cryptogen模块一共由4个命令,这4个命令及其作用如下:
help | 显示帮助信息 |
generate | 根据配置文件生成证书信息 |
showtemplate | 显示模板配置文件 |
version | 显示当前模块的版本号 |
2.cryptogen模块配置文件
cryptogen模块的配置文件用来描述需要生成的证书文件的特征,例如有多少个组织,有多少个节点,需要多少个账号。下面我们通过一个简单的例子来初步了解一下配置文件的结构,这个例子是我们前面《Fabric实战(2)运行一个简单的fabric网络(容器外)》用到的例子:
OrdererOrgs: #定义orderer节点
- Name: Orderer #orderer节点的名称
Domain: simple-network.com #orderer节点的根域名
Specs:
- Hostname: orderer #orderer节点的主机名
PeerOrgs:
- Name: Org1 #组织1的名称
Domain: org1.simple-network.com #组织1的根域名
Template:
Count: 2 #组织1中的节点数量
Users:
Count: 2 #组织1中的用户数量
- Name: Org2 #组织2的名称
Domain: org2.simple-network.com #组织2的根域名
Template:
Count: 2 #组织2中的节点数量
Users:
Count: 2 #组织2中的用户数量
上面的配置文件定义了一个orderer节点,orderer节点的名子叫orderer,orderer节点的根域名是simple-network.com,主机名是orderer。配置文件同时还定义了2个组织,两个组织的名字分别是Org1和org2,其中Org1包含2个节点和2个用户,组织Org2包含了2个节点和2个用户。
除了Fabirc源码中提供的例子,还可以通过命令cryptogen showtemplate获取默认的模板文件,在实际的项目中稍加修改这些模板文件就可以使用。
3.cryptogen生成证书文件
我们使用上面的示例配置文件生成证书文件,命令如下:
cryptogen generate --config=crypto-config.yaml --output ./crypto-config
--output是指定证书文件生成目录
进入crypto-config文件后,我们会看到2个文件夹,通过命令tree -L 1显示如下:
.
├── ordererOrganizations #orderer节点相关的证书文件
└── peerOrganizations #组织节点相关的证书文件
3.1 orderer相关证书文件
进入ordererOrganizations目录,通过命令tree -L 4显示如下:
.
└── simple-network.com #根域名为simple-network.com的orderer节点的相关证书文件
├── ca #CA服务器签名文件
│ ├── 6f9e7e7ad0fb9767e61608819083f65a20c2a16ec0a97ceeb3f5b76e213ad951_sk
│ ├── ca.simple-network.com-cert.pem
│ └── e3a4068e43af1ad831ba813fb430e27b7dd4796fc1bb0b25a937bdc556fb9471_sk
├── msp
│ ├── admincerts #orderer管理员的证书
│ │ └── [email protected]
│ ├── cacerts #orderer根域名服务器的签名文件
│ │ └── ca.simple-network.com-cert.pem
│ └── tlscacerts #TLS链接用的身份证书
│ └── tlsca.simple-network.com-cert.pem
├── orderers #orderer节点需要的相关证书文件
│ └── orderer.simple-network.com
│ ├── msp #orderer节点相关证书
│ └── tls #orderer节点和其他节点连接用的身份证书
├── tlsca
│ ├── 687ca4231757b074e4abb97d977fbff4b667bfbd6329bbe82eca7101760747e4_sk
│ ├── 9015b2e134689523aa5600eb5c9690656fe1314b51143cf3cf2f5044fe195269_sk
│ └── tlsca.simple-network.com-cert.pem
└── users #orderer节点用户相关的证书
└── [email protected]
├── msp
└── tls
3.2 组织peer相关证书文件
进入peerOrganizations目录,通过命令tree -L 1显示如下:
.
├── org1.simple-network.com
└── org2.simple-network.com
通过上面的命令我们可以发现,在文件夹peerOrganizations中包含两个子文件夹,从这三个字文件夹的命名可以发现他们分别对应crypto-config.yaml配置文件中定义的2个组织。
这两个组织的目录结构是一样的,下面我们以组织Org1为例来说明这些文件的作用。
进入文件夹org1.simple-network.com 执行命令tree -L 4显示如下:
.
├── ca #根节点签名证书
│ ├── c8019061b02933441ec7fab6894a7fac60da4ea79eb6fb53df2c7e97e6da003c_sk
│ ├── ca.org1.simple-network.com-cert.pem
│ └── fe3f1287e34ab66302ce2f48280b14dccbb5bf029266e245baa334da170cbd97_sk
├── msp
│ ├── admincerts #组织管理员证书
│ │ └── [email protected]
│ ├── cacerts #组织根证书
│ │ └── ca.org1.simple-network.com-cert.pem
│ └── tlscacerts #TLS链接身份证书
│ └── tlsca.org1.simple-network.com-cert.pem
├── peers
│ ├── peer0.org1.simple-network.com
│ │ ├── msp
│ │ │ ├── admincerts #组织管理员证书,持有这些证书才能进行创建通道等操作
│ │ │ ├── cacerts #组织根证书
│ │ │ ├── keystore #当前节点的私钥
│ │ │ ├── signcerts #当前节点用于签名的数字证书
│ │ │ └── tlscacerts #TLS连接的身份证书
│ │ └── tls
│ │ ├── ca.crt #组织的根证书
│ │ ├── server.crt #验证本节点TLS签名的证书
│ │ └── server.key #当前节点的私钥文件,用来进行TLS签名
│ └── peer1.org1.simple-network.com
│ ├── msp
│ │ ├── admincerts
│ │ ├── cacerts
│ │ ├── keystore
│ │ ├── signcerts
│ │ └── tlscacerts
│ └── tls
│ ├── ca.crt
│ ├── server.crt
│ └── server.key
├── tlsca
│ ├── 324c5dcee988fd9ad259e059a12dd4b53ac6aff72fdaf47d905327fb2aeba52e_sk
│ ├── f728b8e6f90603e51a35adee0a30c8c37507137b7c5d4fae442167968c4a4ded_sk
│ └── tlsca.org1.simple-network.com-cert.pem
└── users
├── [email protected]
│ ├── msp
│ │ ├── admincerts #管理员身份证书的根证书等于组织根证书
│ │ ├── cacerts #管理员用户所属组织的根证书
│ │ ├── keystore #管理员用户的私钥
│ │ ├── signcerts #管理员用户的签名证书
│ │ └── tlscacerts #TLS链接通信证书,SDK客户端使用
│ └── tls
│ ├── ca.crt #组织根证书
│ ├── client.crt
│ ├── client.key
│ ├── server.crt #管理员身份的证书
│ └── server.key #管理员私钥
├── [email protected]
│ ├── msp
│ │ ├── admincerts #User1用户身份证书的根证书等于组织根证书
│ │ ├── cacerts #User1用户所属组织的根证书
│ │ ├── keystore #User1用户的私钥
│ │ ├── signcerts #User1用户的签名证书
│ │ └── tlscacerts #TLS链接通信证书,SDK客户端使用
│ └── tls
│ ├── ca.crt
│ ├── client.crt
│ ├── client.key
│ ├── server.crt
│ └── server.key
└── [email protected]
├── msp
│ ├── admincerts
│ ├── cacerts
│ ├── keystore
│ ├── signcerts
│ └── tlscacerts
└── tls
├── ca.crt
├── client.crt
├── client.key
├── server.crt
└── server.key
链人学院:http://www.chainhr.cn/