### **1. 生成证书配置文件**
#### **1. 释义**
在所有的系统中,必须要有账号和密码才可以进行操作。Fabric服务也是一样,不过在 Fabric 网络中,需要通过证书和密钥来管理和鉴别成员身份,经常需要进行证书生成和配置操作 。通常这些操作可 以使用 PKI 服务或者 OpenSSL 工具来手动实现单个证书的签发 。为了提高对负责组织结构和批量证书进行管理的效率,基于 Go 语言的 crypto 库, Fabric提供了 cryptogen (Crypto Generator)工具 。 cryptogen 可 以快速地根据配置自动批量生成所需要 的密钥和证书文件。
#### **2. 配置文件**
cryptogen 工具支持从配置文件 (通过- config 参数指定 ,通常命名为 crypto-config. yaml ) 中读入YAML格式的配置模板信息 。配置文件中会指定网络的拓扑结构,可以指定两类组织的信息。
* 组织 OrdererOrgs :构成 Orderer 集群的节点所属组织
* 组织 PeerOrgs :构成 Peer 集群的节点所属组织
* 名称 ( Name ) : 组织的名称
* 组织域 ( Domain ):组织的命名域
* CA : 组织的 CA 地址,包括 Hostname域
* 若干节点( Node ) : 一个节点包括Hostname
* Specs 字段指定一组节点 , 或者用 Template 字段指定自动生成节点 的个数
* 用户( User)模板: 自动生成除 admin 外的用户个数
#### **3. 配置示例**
```
OrdererOrgs: # 排序节点的组织定义
- Name: Orderer # orderer节点的名称
Domain: example.com # orderer节点的根域名
Specs:
- Hostname: orderer # orderer节点的主机名
PeerOrgs: # peer节点的组织定义
- Name: Org1 # 组织1的名称 1 1
Domain: org1.example.com # 组织1的根域名
EnableNodeOUs: true
Template:
Count: 2 # 组织1中的节点(peer)数目
Users:
Count: 1 # 组织1中的用户数目
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
```
#### **4. 子命令和参数**
* generate \[flags]:生成密钥和证书文件;
* showtemplate :查看配置模板的信息 。
其中, generate 子命令支持如下参数:
* 一output :指定存放生成密钥和证书文件的路径,默认为当前目录下的 crypto-config 目录
* 一config :指定所采用的配置模板文件的路径
#### **5. 生成秘钥和证书文件**
在配置文件同级目录下执行:
```
$ cryptogen generate --config=./crycrypto-config.yaml --output ./crypto-config
```
#### **6. 生成秘钥和证书文件解析**
查看当前目录下的 crypto-config 目录,生成 ordererOrganizations 和 peerOrganizations两棵组织树 。 每个组织树下都包括 ca 、 msp 、 orderers (或 peers )、 users 四个子目录 。
```
crypto-config$ tree
.
├── ordererOrganizations
│ └── example.com
│ ├── ca
│ │ ├── a0606a4a860a1e31c90a23788da6f3b6b74925ed0d23061af4899409ba46ae6a_sk
│ │ └── ca.example.com-cert.pem
│ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.example.com-cert.pem
│ │ └── tlscacerts
│ │ └── tlsca.example.com-cert.pem
│ ├── orderers
│ │ └── orderer.example.com
│ │ ├── msp
│ │ │ ├── admincerts
│ │ │ │ └── Admin@example.com-cert.pem
│ │ │ ├── cacerts
│ │ │ │ └── ca.example.com-cert.pem
│ │ │ ├── keystore
│ │ │ │ └── 4d2f776c0fef8eac3f460a7c3558dc7859c4fe458e262e674a6c23f242ea33d1_sk
│ │ │ ├── signcerts
│ │ │ │ └── orderer.example.com-cert.pem
│ │ │ └── tlscacerts
│ │ │ └── tlsca.example.com-cert.pem
│ │ └── tls
│ │ ├── ca.crt
│ │ ├── server.crt
│ │ └── server.key
│ ├── tlsca
│ │ ├── 8d2186556c85d515e737d0c0da8d0d7672785b685cb503bcb95e53dcc279fba7_sk
│ │ └── tlsca.example.com-cert.pem
│ └── users
│ └── Admin@example.com
│ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.example.com-cert.pem
│ │ ├── keystore
│ │ │ └── 1deeab5433fa6e5f045eb763109d6165268fba153211af1281f00d45f54b1022_sk
│ │ ├── signcerts
│ │ │ └── Admin@example.com-cert.pem
│ │ └── tlscacerts
│ │ └── tlsca.example.com-cert.pem
│ └── tls
│ ├── ca.crt
│ ├── server.crt
│ └── server.key
└── peerOrganizations
└── org1.example.com
├── ca*放组织的根证书和对应的私钥文件
│ ├── 4239aa0dcd76daeeb8ba0cda701851d14504d31aad1b2ddddbac6a57365e497c_sk
│ ├── ca.org1.example.com-cert.pem
│ └── org1.example.com-cert.pem
├── msp*存放代表该组织的身份信息
│ ├── admincerts*组织管理员的身份验证证书目录
│ │ └── Admin@org1.example.com-cert.pem*组织管理员的身份验证证书,被根证书签名
│ ├── cacerts*组织的根证书目录
│ │ └── ca.org1.example.com-cert.pem*组织的根证书,同 ca 目录下文件
│ └── tlscacerts*TLS 的 CA 证书目录
│ └── tlsca.org1.example.com-cert.pem*用于 TLS 的 CA 证书,自签名
├── peers*存放属于该组织的所有 Peer 节点证书目录
│ └── peer0.org1.example.com*peer0节点
│ ├── msp*组织的根证书目录
│ │ ├── admincerts*组织管理员的身份验证证书目录
│ │ │ └── Admin@org1.example.com-cert.pem*组织管理员的身份验证证书,被根证书签名
│ │ ├── cacerts*组织的根证书目录
│ │ │ └── ca.org1.example.com-cert.pem*组织的根证书文件
│ │ ├── keystore*本节点的身份私钥目录
│ │ │ └── 46be1d569fe68f33e517c9e0072a0ccfbfb42727480fb8c8d0223af321a7893d_sk*节点身份私钥
│ │ ├── signcert*验证本节点签名的证书目录
│ │ │ └── peer0.org1.example.com-cert.pem*验证本节点签名的证书目录,被根证书签名
│ │ └── tlscacerts*Tls连接证书目录
│ │ └── tlsca.org1.example.com-cert.pem*组织tls证书
│ └── tls*存放 Tls相关的证书和私钥目录
│ ├── ca.crt*组织的根证书
│ ├── server.crt*验证本节点签名的证书,被组织根证书签名
│ └── server.key*本节点的身份私钥,用来签名
├── tlsca*存放组织tls连接用的根证书和私钥文件。
│ ├── ed3fd82393e95fc2c475afc113c8d2c591f745d1babc4d6d9cce0a1acc168acb_sk
│ └── tlsca.org1.example.com-cert.pem*TLS根证书
└── users*存放属于该组织的用户的实体
├── Admin@org1.example.com*
管理员用户的信息,包括其msp证书和tls证书两类
│ ├── msp*组织根证书作为管理者身份验证证书
│ │ ├── admincerts*组织根证书作为管理者身份验证证书
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ ├── cacerts*组织的根证书
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── keystore*本用户的身份私钥
│ │ │ └── cd96d5260ad4757551ed4a5a991e62130f8008a0bf996e4e4b84cd097a747fec_sk
│ │ ├── signcerts*管理员用户的身份验证证书,被组织根证书签名。要被某个Peer认可,则必须放到该peer的msp/admincerts下。
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ └── tlscacerts*TLS连接用的身份证书,即组织TLS证书。
│ │ └── tlsca.org1.example.com-cert.pem
│ └── tls*存放tls相关的证书和私钥
│ ├── ca.crt*组织的根证书
│ ├── server.crt*管理员的用户身份验证证书,被组织根证书签名
│ └── server.key*管理员用户的身份私钥,用来签名
└── User1@org1.example.com
├── msp
│ ├── admincerts
│ │ └── User1@org1.example.com-cert.pem
│ ├── cacerts
│ │ └── ca.org1.example.com-cert.pem
│ ├── keystore
│ │ └── c75bd6911aca808941c3557ee7c97e90f3952e379497dc55eb903f31b50abc83_sk
│ ├── signcerts
│ │ └── User1@org1.example.com-cert.pem
│ └── tlscacerts
│ └── tlsca.org1.example.com-cert.pem
└── tls
├── ca.crt
├── server.crt
└── server.key
```
以 `org1.example.com`目录下来解析:
* ca
* msp
* peers
* tlsca
* users
##### **6.1 目录-ca 存放组织的根证书和对应的私钥文件**
* ca :存放组织的根证书和对应的私钥文件,默认采用 EC 算法,证书为自签名
##### **6.2 目录-msp 存放代表该组织的身份信息**
* admincerts :组织管理员的身份验证证书,被根证书签名
* cacerts :组织的根证书,同 ca 目录下文件
* tlscacerts :用于 TLS 的 CA 证书,自签名
##### **6.2 目录-peers 存放属于该组织的所有 Peer 节点**
* peer0.org1.example.com:第一个 peer 的信息,包括其 msp 证书和 tls 证书两类
* msp:
* admincerts :组织管理员的身份验证证书 。 Peer 将基于这些证书来认证交易签署者是否为管理员身份
* cacert贮存放组织的根证书 。
* key store :本节点的身份私钥,用来签名 。
* signce白: 验证本节点签名的证书,被组织根证书签名 。
* tlscacerts : TLS 连接用的身份证书,即组织 TLS 证书 。
* is :存放 tis 相关的证书和私钥
* a.crt :组织的根证书 。
。 server.crt :验证本节点签名的证书,被组织根证书签名 。
。 server.key : 本节点的身份私钥,用来签名 。
• peerl :第二个 peer 的信息,结构类似 。 (此处省略。 )
口 users :存放属于该组织的用户的实体 。
• Admin :管理员用户的信息,包括其 msp 证书和 tis 证书两类 。
• msp:
。 admincerts :管理身份验证证书 。
。 cacerts :存放组织的根证书 。
。 key store :本用户的身份私钥,用来签名 。
。 signcerts :管理员用户的身份验证证书,被组织根证书签名 。 要被某个 Peer
认可,则必须放到该 Peer 的 msp/admincerts 下 。
。 tlscacerts: TLS 连接用的身份证书,即组织 TLS 证书 。
• tis :存放 tis 相关的证书和私钥 。
。 ca .crt :组织的根证书 。
。 server.crt : 管理员的用户身份验证证书,被组织根证书签名 。
。 server.key :管理员用户的身份私钥,用来签名。
• Userl :第一个用户的信息,包括 msp 证书和 tis 证书两类。
• msp:
。 admincerts : 管理身份验证证书 。
。 cacerts :存放组织的根证书 。
198 令实践篇
。 keys tore :本用户的身份私钥,用来签名 。
。 sign certs :验证本用户签名的身份证书,被组织根证书签名 。
。 tlscacerts: TLS 连接用的身份证书,即组织 TLS 证书 。
• tls :存放 tls 相关的证书和私钥 。
。 ca.crt :组织的根证书 。
。 se凹er.crt :验证用户签名的身份证书,被组织根证书签名 。
。 server.key :用户的身份私钥,用来签名 。
• User2 :第二个用户的信息,结构类似 。 (此处省略。 )