🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
### **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 :第二个用户的信息,结构类似 。 (此处省略。 )