1. 网络节点设置

网络名称:rentnet

联盟组织:orderer排序组织+三个成员组织supervisor、rentalcrop、 agency

通道:rentsign

账本数据库: couchdb

物理节点组织容器节点
supervisorsupervisor.freerent.cnpeer0.supervisor.freerent.cn
peer1.supervisor.freerent.cn
peer2.supervisor.freerent.cn
couchdb0.supervisor.freerent.cn
couchdb1.supervisor.freerent.cn
couchdb2.supervisor.freerent.cn
orderer0.orderer.freerent.cn
rentalcroprentalcrop.freerent.cnpeer0.rentalcrop.freerent.cn
peer1.rentalcrop.freerent.cn
couchdb0.rentalcrop.freerent.cn
couchdb1.rentalcrop.freerent.cn
orderer1.orderer.freerent.cn
agencyagency.freerent.cnpeer0.customer.freerent.cn
peer1.customer.freerent.cn
couchdb0.agency.freerent.cn
couchdb1.agency.freerent.cn
orderer2.orderer.freerent.cn

2. 节点身份生成

Fabric网络通过证书和密钥来管理和认证成员身份,Fabric通过Fabric-CA提供了PKI服务。为了方便批量管理组织证书,fabric基于Go语言的标准crypto库提供了cryptogen工具。用了cryprtogen工具生成加密材料,就无需CA来到动态生成加密材料。

cryptogen支持的命令包括:

  • generate[flages] 生成密钥和证书文件
  • showtemplate,查看配置模板信息
  • extend[flages],扩展当前密钥和证书文件
  • version,版本信息

flag :

  • –config :yaml配置模板文件
  • – output:指定材料生成路径,默认为当前目录下的crypto-config目录

2.1 crypto-config.yaml

crypto-config.yaml为节点生成加密材料的配置文件。
存放目录: /home/freerent/network/channel

# ---------------------------------------------------------------------------# "OrdererOrgs" - 管理排序节点的组织的定义# ---------------------------------------------------------------------------OrdererOrgs:- Name: Orderer# 组织名称Domain: freerent.cn# 组织命名域Specs:# 每个主机配置,通用名- Hostname: orderer0- Hostname: orderer1- Hostname: orderer2# ---------------------------------------------------------------------------# "PeerOrgs" - 管理对等节点的组织的定义# ---------------------------------------------------------------------------PeerOrgs:- Name: SupervisorDomain: supervisor.freerent.cn# 如果设置了 EnableNodeOUs ,就在msp下生成config.yaml文件EnableNodeOUs: trueTemplate:Count: 3 #生成证书的数量=> 组织中peer节点的数目Users:Count: 2 #生成用户证书个数- Name: RentalcropDomain: rentalcrop.freerent.cnEnableNodeOUs: trueTemplate:Count: 2 #生成证书的数量Users:Count: 1 #生成用户证书个数- Name: AgencyDomain: agency.freerent.cnEnableNodeOUs: trueTemplate:Count: 2 Users:Count: 1 

2.2 加密材料生成脚本

将fabric提供三个工具拷贝至bin目录下,并赋777权限。这三个脚本可以到fabric-samples里面去下载,放到bin目录下。

3. 加密材料分析

目录 : /home/freerent/network/channel

默认情况下,generate生成的加密材料在当前目录下的crypto-config目录下,目录结构如下所示。生成了ordererOrganizations和peerOrganizations两个组织树。每棵组织树下面都有ca、tlsca、msp、orderers(或者peers),users等子目录。
以supervisor组织为例,

peerOrganizations/#peer组织├── supervisor.freerent.cn#组织的所有身份证书│ ├── ca#存放私钥与组织根证书│ │ ├── ca.supervisor.freerent.cn-cert.pem│ │ └── priv_sk│ ├── msp#存放代表组织根证书的身份信息│ │ ├── admincerts# 组织管理员的身份验证证书,被根证书签名│ │ ├── cacerts# 组织信任的CA根证书,同ca目录下文件│ │ │ └── ca.supervisor.freerent.cn-cert.pem│ │ ├── config.yaml# 指定是否开启OU,存放组织根证书路径和OU识别关键字│ │ └── tlscacerts # 用于TLS验证的信任的CA证书,自签名│ │ └── tlsca.supervisor.freerent.cn-cert.pem│ ││ ├── peers#peers目录与order组织的orderers目录类似│ │ ├── peer0.supervisor.freerent.cn│ │ │ ├── msp# 存放代表身份的相关证书和私钥文件│ │ │ │ ├── admincerts # 该Peer认可的管理员身份证书。可以确认交易是否被管理员签署,默认是Admin用户的身份证书│ │ │ │ ├── cacerts# 存放组织的CA根证书│ │ │ │ │ └── ca.supervisor.freerent.cn.pem│ │ │ │ ├── config.yaml│ │ │ │ ├── keystore # 节点的身份私钥,用来签名│ │ │ │ │ └── priv_sk│ │ │ │ ├── signcerts # 验证本节点签名的证书,被组织根证书签名,│ │ │ │ │ └── peer0.supervisor.freerent.cn.pem│ │ │ │ └── tlscacerts # TLS连接用的CA证书│ │ │ │ └── tlsca.supervisor.freerent.cn.pem│ │ │ └── tls│ │ │ ├── ca.crt# 组织的TLS CA证书│ │ │ ├── server.crt # 验证本钱点签名的证书,被组织根证书签名│ │ │ └── server.key # 本节点TLS私钥,用来签名│ │ └── peer1.supervisor.freerent.cn # 一样│ │ │ │ └── peer2.supervisor.freerent.cn # 一样│ │ │ ├── tlsca#存放该组织的TLS证书和对应的私钥 和msp中一样│ │ ├── priv_sk│ │ └── tlsca.supervisor.freerent.cn-cert.pem│ │ │ └── users # 该组织的用户的实体│ ├── Admin@supervisor.freerent.cn # 管理员│ │ ├── msp # 存放代表身份的相关证书和私钥文件│ │ │ ├── admincerts #Admin用户的管理身份证书,被组织根证书签名│ │ │ ├── cacerts # 组织根证书│ │ │ │ └── ca.supervisor.freerent.cn-cert.pem│ │ │ ├── config.yaml│ │ │ ├── keystore# 用户签名私钥│ │ │ │ └── priv_sk│ │ │ ├── signcerts # 管理员身份验证证书,若被peer认可,则会存放到peer的msp/admincerts目录下│ │ │ │ └── Admin@supervisor.freerent.cn-cert.pem│ │ │ └── tlscacerts # 验证TLS连接用的CA证书,即组织的TLS CA证书│ │ │ └── tlsca.supervisor.freerent.cn.pem│ │ └── tls │ │ ├── ca.crt # 组织的TLS CA证书│ │ ├── client.crt # 管理员用户的身份验证证书,被组织根证书签名│ │ └── client.key # 管理员用户的私钥,用来签名│ └── User1@supervisor.freerent.cn # admin类似│ 

说明:
1、crypto-config.yaml一般默认一个组织仅一个admin,因此在一个组织内部,所有的admincerts是一样的,admin的私钥在Users的Admin文件夹下;
2、在一个组织内部,所有的cacerts是一样的,ca的私钥在ca文件夹下;
3、在一个组织内部,所有的tlscerts是一样的,且和tls文件夹下的ca.cert一样,tlsca的私钥在tlsca文件夹下。