Hyperledger Fabric工具cryptogen介绍
简介
简单的说,cryptogen是用来生产fabric需要的证书的;这个生产过程是静态的。
和cryptogen工具对等的是CA服务,是一种动态的证书生产环境;在开发和测试阶段,在环境中不需要部署CA,因此可以简单的使用cryptogen工具,当然在运行环境中也可以不使用CA服务器,而继续使用cryptogen。
编译
$ export GOPATH=~/go
$ cd $GOPATH/src/github.com/hyperledger/fabric
$ make cryptogen
...
build/bin/cryptogen
运行结果就在当前的build/bin/cryptogen目录下。
如果在编译过程中遇到如下错误:
vendor/github.com/miekg/pkcs11/pkcs11.go:26:18: fatal error: ltdl.h: No such file or directory
那需要安装libtool-ltdl-devel包;在centos下可以运行下面命令,其他系统请自行上网查询:
$ sudo yum install -y libtool-ltdl-devel
使用
配置文件
cryptogen使用一个YAML格式的配置文件crypto-config.yaml
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
PeerOrgs:
- Name: Org1
Domain: org1.example.com
Template:
Count: 2
Users:
Count: 1
- Name: Org2
Domain: org2.example.com
Template:
Count: 2
Users:
Count: 2
命令行
$ cryptogen generate --config=./crypto-config.yaml
运行结果在当前目录下生产一个crypto-config目录,内容如下:
$ tree -L 2 crypto-config
crypto-config
├── ordererOrganizations
│ └── example.com
└── peerOrganizations
├── org1.example.com
└── org2.example.com
每一个org生成一个目录(example.com, org1.example.com, org2.example.com),org目录下面的内容是一致的,我们看任何一个目录即可,例如查看org2.example.com:
$ tree org2.example.com -L 2
org2.example.com
├── ca # 包含org的根证书和Key
│ ├── 2eb24f43416300254c6c3c4fbb6a306dc961cb0ccf05dc124cd8a198fe1107a8_sk
│ └── ca.org2.example.com-cert.pem
├── msp # 包含org的根msp信息
│ ├── admincerts
│ ├── cacerts
│ ├── config.yaml
│ └── tlscacerts
├── peers # 包含org下面的所有peer的证书
│ ├── peer0.org2.example.com
│ └── peer1.org2.example.com
├── tlsca # 包含org的根tlsca证书和key
│ ├── 7f6b5cf9dd03fd45c48b78a88f1ebb136b1ab55b7c4a58fdb15c59534d3ce2fd_sk
│ └── tlsca.org2.example.com-cert.pem
└── users # 包含org下面所有用户的证书
├── [email protected] #管理员用户
├── [email protected]
└── [email protected]
再看一下peer和user的证书,由于他们的结构是一样的,下面给一个user(User2)的证书例子:
$ tree org2.example.com/users/[email protected]/
org2.example.com/users/[email protected]/
├── msp # msp证书
│ ├── admincerts
│ │ └── [email protected] # 同org的admin证书
│ ├── cacerts
│ │ └── ca.org2.example.com-cert.pem # 同org的ca根证书
│ ├── keystore
│ │ └── 8654e4f70a1e0c8231f17886622f9bbfb531123dee1eb46dfe7b1e9695a3469e_sk
│ ├── signcerts
│ │ └── [email protected] # User2的MSP证书
│ └── tlscacerts
│ └── tlsca.org2.example.com-cert.pem # 同org的tlsca根证书
└── tls
├── ca.crt # 同org的tlsca根证书
├── client.crt # User2的 tls证书
└── client.key # User2的 tls key
证书的扩展
当需要增加新的节点(peer)或者用户(user)的时候,需要为新节点/用户生成新的证书,当然老证书还得继续使用。这个时候需要用到extend命令。
第一步,修改./crypto-config.yaml配置文件,增加peer或者user的count。
- Name: Org2
Domain: org2.example.com
Template:
#Count: 2
Count: 4
Users:
#Count: 2
Count: 4
上述我们把peer和user扩展到4个。
$ cryptogen extend --config=./crypto-config.yaml
再看org2的成员:
$ tree -L 2 crypto-config/peerOrganizations/org2.example.com
crypto-config/peerOrganizations/org2.example.com
├── ca
│ ├── 2eb24f43416300254c6c3c4fbb6a306dc961cb0ccf05dc124cd8a198fe1107a8_sk
│ └── ca.org2.example.com-cert.pem
├── msp
│ ├── admincerts
│ ├── cacerts
│ ├── config.yaml
│ └── tlscacerts
├── peers
│ ├── peer0.org2.example.com
│ ├── peer1.org2.example.com
│ ├── peer2.org2.example.com
│ └── peer3.org2.example.com
├── tlsca
│ ├── 7f6b5cf9dd03fd45c48b78a88f1ebb136b1ab55b7c4a58fdb15c59534d3ce2fd_sk
│ └── tlsca.org2.example.com-cert.pem
└── users
├── [email protected]
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
peer2和 user2目录下面分别新增了两个目录;我们可以检查peer0/peer1/user1/user2的证书和原来是一样的,也就是没有更改已经签发的证书(包括根证书),只是新增的需要的证书。