[Fabric]-First-Network (crypto-config.yaml详解)
Posted 长泽雅美你老婆
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Fabric]-First-Network (crypto-config.yaml详解)相关的知识,希望对你有一定的参考价值。
参考:配置文件
很感谢大佬的文章,茅塞顿开,下面我又看了点书写的.
希望对大家有一点点的帮助。不对的地方希望指正。
1. 简介
用于生成相关组织的私钥和证书
fabric网络中有两种类型的公私钥和证书
- 给节点之间通讯安全而准备的TLS证书
- 用户登录和权限控制的用户证书
2. 具体配置信息
主要分为两大块:OrdererOrgs、PeerOrgs
# 排序节点组织的定于
OrdererOrgs:
- Name: Orderer
#组织的域名
Domain: example.com
Specs:
- Hostname: orderer
CommonName: orderer.test.com
# - Hostname: orderer2
# - Hostname: orderer3
# - Hostname: orderer4
- Hostname: orderer5
CommonName: orderer5.test.com
# peer节点的组织的定义
PeerOrgs:
- Name: Org1
Domain: org1.example.com
## 如果设置了 EnableNodeOUs ,就在msp下生成config.yaml文件
EnableNodeOUs: true
# Specs:
# - Hostname: foo # implicitly "foo.org1.example.com"
# CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above
# - Hostname: bar
# - Hostname: baz
Template:
Count: 2
Users:
Count: 1
- Name: Org2
Domain: org2.example.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
(1)OrdererOrgs
排序节点的组织的定义,在定义排序节点时,会同时指定节点名称,节点域名以及指定一个规范(Specs
)。
(2)PeerOrgs
peer节点的组织的定义,在定义peer节点时,与排序节点一样类似的配置。
peer节点的配置由两种方案,一种是通过规范列表指定,一种是通过模板创建的方式实现。
- Template
# 组织名称
- Name: Org1
# 域名
Domain: org1.example.com
# 允许通过该模板定义创建 0->count-1 个组织节点
Template:
Count: 2
# 除了admin以外的创建用户,其中count定义代表创建的用户数量
Users:
Count: 1
- Specs
- Name: Org1
Domain: org1.example.com
Specs:
# 指定了节点目录和文件名。生成的就是foo27.org5.example.com
- Hostname: foo
CommonName: foo27.org5.example.com
# 不指定默认就是“.HostName..Domain”
# 比如:bar.org1.example.com
- Hostname: bar
- Hostname: baz
默认选择第一种就行,而且这两种方案不冲突,可以同时定义,但是要注意名称不能冲突。
3. 使用
Fabric
使用了cryptogen
工具用来调用上面的配置文件生成私钥和证书
cryptogen generate --config=./crypto-config.yaml
执行完以后,会在当前目录生成一个 crypto-config 目录,当然也可以在命令中添加 --output 选项来指定输出的目录。在这个目录下就会根据 Orderer 和Peer 各自生成两个文件夹:
- ordererOrganizations
- peerOrganizations
它们分别代表着orderer和peer的组织及对应目录下的证书文件。
每个组织下都有ca,tlsca,msp,orderers(或者peers),users等5个文件,下面通过tree命令的输出结果,分别解释一下各个目录的作用。
- 目录结构
crypto-config
├── ordererOrganizations ## 组织配置
│ └── example.com ## 组织根域名
│ ├── ca ## 存放组织根证书以及私钥
│ │ ├── 4c08c6dc603f08dac6dd490491ac7de077a954bc28150b8ad5b87b78cb8ed5c0_sk ## 私钥
│ │ └── ca.example.com-cert.pem
│ ├── msp ## 存放该组织身份信息
│ │ ├── admincerts ## 组织管理员
│ │ │ └── Admin@example.com-cert.pem ## 管理员身份验证证书,被根证书签名
│ │ ├── cacerts ## 组织的根证书
│ │ │ └── ca.example.com-cert.pem ## 组织的根证书,与ca中的一致
│ ├── config.yaml ## 配置文件中加了 EnableNodeOUs 参数生成的config.yaml文件,记录 OrganizationalUnitIdentitifiers 信息,包括根证书位置和ID信息
│ │ └── tlscacerts ## 用于TLS的CA证书
│ │ └── tlsca.example.com-cert.pem ## 用于TLS的CA证书,自签名
│ ├── orderers ## 存放所有 Orderer 的身份信息
│ │ └── orderer.example.com
│ │ ├── msp
│ │ │ ├── admincerts ## 组织管理员的身份验证证书,与 msp.admincerts 保持一致
│ │ │ │ └── Admin@example.com-cert.pem ## orderer被给予这些证书来确认交易签名是否为管理员签名
│ │ │ ├── cacerts ## 存放组织根证书,与CA目录里一致
│ │ │ │ └── ca.example.com-cert.pem
│ │ │ ├── keystore ## 本节点的身份私钥,用来签名
│ │ │ │ └── 34fe6b5e8cd256a6fc23bc6ff70819f4a3cd2df1b228599e826efed92617a61f_sk
│ │ │ ├── signcerts ## 验证本节点签名的证书,被根证书签名
│ │ │ │ └── orderer.example.com-cert.pem
│ │ │ └── tlscacerts ## TLS连接用的身份证书,与 msp.tlscacerts 保持一致
│ │ │ └── tlsca.example.com-cert.pem
│ │ └── tls ## TLS的相关信息
│ │ ├── ca.crt ## 组织的根证书
│ │ ├── server.crt ## 验证本节点签名的证书,被根证书签名
│ │ └── server.key ## 本节点的身份私钥,用来签名
│ ├── tlsca ## 存放tls相关的证书和私钥
│ │ ├── e20de2f55b528a5150a897f5647e09fe20bea62b7b9dcab5e5abc59bf66a5b10_sk
│ │ └── tlsca.example.com-cert.pem
│ └── users ## 存放属于该组织的用户的实体
│ └── Admin@example.com ## 管理员用户的信息,其中包括msp证书和tls证书两类
│ ├── msp
│ │ ├── admincerts ## 组织管理员的身份验证证书,与 msp.admincerts 保持一致
│ │ │ └── Admin@example.com-cert.pem
│ │ ├── cacerts ## 存放组织根证书,与CA目录里一致
│ │ │ └── ca.example.com-cert.pem
│ │ ├── keystore ## 本用户的身份私钥,用来签名
│ │ │ └── 1718d4afba538037e0adc508de9c13274753b800c09badf1fa64be46d828eb94_sk
│ │ ├── signcerts ## 验证本用户的身份验证证书,被根证书签名,要被某个Orderer认可,则必须放到该 Orderer 的msp/admincerts目录下,因此上面ordere的 msp/admincerts目录下的证书应该要是从这里复制一份过去
│ │ │ └── Admin@example.com-cert.pem
│ │ └── tlscacerts ## TLS连接用的身份证书,与 msp.tlscacerts 保持一致
│ │ └── tlsca.example.com-cert.pem
│ └── tls ## TLS的相关信息
│ ├── ca.crt
│ ├── client.crt ## 管理员身份验证证书,被根证书签名
│ └── client.key ## 管理员的身份私钥,用来签名
└── peerOrganizations ## peer组织
└── org1.example.com ## 第一个组织的所有身份证书
├── ca ## 存放私钥与组织根证书
│ ├── bad4233ca8315ab62e24bcc0c4f02f0fce954be488b461c3037278d0facad870_sk
│ └── ca.org1.example.com-cert.pem
├── msp ## msp信息与order组织类似
│ ├── admincerts
│ │ └── Admin@org1.example.com-cert.pem
│ ├── cacerts
│ │ └── ca.org1.example.com-cert.pem
│ ├── config.yaml
│ └── tlscacerts
│ └── tlsca.org1.example.com-cert.pem
├── peers
│ └── peer0.org1.example.com
│ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── config.yaml
│ │ ├── keystore
│ │ │ └── e4441bca94a8c89345aa166858657e691c28eb236938018cf4f13d1d9661b66c_sk
│ │ ├── signcerts
│ │ │ └── peer0.org1.example.com-cert.pem
│ │ └── tlscacerts
│ │ └── tlsca.org1.example.com-cert.pem
│ └── tls
│ ├── ca.crt
│ ├── server.crt
│ └── server.key
├── tlsca
│ ├── c399a9854b0100e3c6eaadd8a8760f94af180c25576b2c0668896968a2e9b9b4_sk
│ └── tlsca.org1.example.com-cert.pem
└── users
├── Admin@org1.example.com
│ ├── msp
│ │ ├── admincerts
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ ├── cacerts
│ │ │ └── ca.org1.example.com-cert.pem
│ │ ├── keystore
│ │ │ └── d1ccedf3f161d0309930ae514b12d0c528ef2153112e9503fed811fba302ef31_sk
│ │ ├── signcerts
│ │ │ └── Admin@org1.example.com-cert.pem
│ │ └── tlscacerts
│ │ └── tlsca.org1.example.com-cert.pem
│ └── tls
│ ├── ca.crt
│ ├── client.crt
│ └── client.key
└── User1@org1.example.com
├── msp
│ ├── admincerts
│ │ └── User1@org1.example.com-cert.pem
│ ├── cacerts
│ │ └── ca.org1.example.com-cert.pem
│ ├── keystore
│ │ └── 3cbf4656b8f98907827b0126375a381433b5d93cfe6a2c2e9be0265fbc4b6003_sk
│ ├── signcerts
│ │ └── User1@org1.example.com-cert.pem
│ └── tlscacerts
│ └── tlsca.org1.example.com-cert.pem
└── tls
├── ca.crt
├── client.crt
└── client.key
- 在一个组织内部(orderer的example.com,peer的org1.example.com,或peer的org2.example.com),所有的admincerts是一样的。admin的私钥在Users的Admin文件夹下
- 在一个组织内部,所有的cacerts是一样的,ca的私钥在ca文件夹下
- 在一个组织内部,所有的tlscacerts是一样的,且和tls文件夹下的ca.crt文件一样。tlsca的私钥在tlsca文件夹下
以上是关于[Fabric]-First-Network (crypto-config.yaml详解)的主要内容,如果未能解决你的问题,请参考以下文章
[Fabric]-First-Network(script.sh文件详解)
[Fabric] First-NetWork(byfn.sh文件分析)
Hyperledger Fabric first-network的初始化启动流程(二)
[Fabric]-First-Network (crypto-config.yaml详解)