欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hyperledger Fabric配置文件解析(一)——crypto-config.yaml

程序员文章站 2022-05-13 19:56:05
...

1. 相关配置文件介绍

  • crypto-config.yaml,用于生成相关组织的私钥和证书
  • configtx.yaml
    • 对相关组织进行配置
    • 配置orderer,用以生成orderer端初始化时所需的block(Genesis Block)
    • 配置channel,用以生成创建channel时所需的tx文件
  • core.yaml,peer端的配置文件
  • orderer.yaml,orderer端的配置文件
  • docker-compose.yaml,用以配置fabric网络的相关容器

下文中所有的配置文件解析,都以 fabric-samples/first-network 中的配置来解析,如果需要可以克隆仓库:fabric-samples

2. 私钥证书配置文件crypto-config.yaml

先来理解一下,私钥与证书的相关概念

  • 使用公钥和私钥就是所谓的非对称加密方式
  • 公钥:是公布出去的给别人使用的,可以被很多人获取。用来加密和验章
  • 私钥:私钥只能自己持有,并且不可以被别人知道。用来解密和签章
  • 证书:是为公钥做认证,为了使公钥真实可信,防止他人伪造公钥;证书颁发机构(CA)会用自己的私钥对用户的公钥和相关信息进行加密,生成“数字证书”,然后证书中心会公布自己的公钥给所有人,用来让别人使用此公钥验证“数字证书”是否由CA颁发,即是否真实可信。

Fabric 中会有两种类型的公私钥和证书

  • 给节点之间通讯安全而准备的TLS证书

  • 用户登录和权限控制的用户证书。

来看下first-network/crypto-config.yaml中的配置信息

原始文件注释信息较多,下面我用自己的理解中文表示代替了原始的英文注释,之后的文件解析也会是这样

OrdererOrgs:							## 定义管理orderer节点的组织
  - Name: Orderer					## 这个组织的名字叫 Orderer
    Domain: example.com		## 这个组织的域名是 example.com 
    
    # 生成证书的时候,证书内会包含Name和Domain信息,orderer.example.com就是这个组织的地址
    
    EnableNodeOUs: true		## 如果设置了 EnableNodeOUs ,就在msp下生成config.yaml文件
    
    # 对于一个Spec来说,配置了CommonName,那么文件夹则命名为CommonName
    # 如果没有配置CommonName,则文件名为:{{.Hostname}}.{{Domain}}
    # 在下面的例子中,在 crypto-config/ordererOrganizations/example.com/orderers 目录下
    # 则会产生两个文件orderer.test.com和orderer5.test.com,
    # 如果没有加CommonName,则目录名为order.example.com与order5.example.comn
    Specs:
      - Hostname: orderer
        CommonName: orderer.test.com
      # - Hostname: orderer2
      # - Hostname: orderer3
      # - Hostname: orderer4
      - Hostname: orderer5
        CommonName: orderer5.test.com

PeerOrgs:											## 定义管理peer节点的组织
  - Name: Org1								
    Domain: org1.example.com	
    EnableNodeOUs: true
  	
  	# Template是按照Template模板生成多个文件,数量由Count决定,起始编号由Start决定
  	# 如下配置会在crypto-config/peerOrganizations/org1.example.com/peers目录下,
  	# 生成两个文件,分别是 peer0.org1.example.com 和 peer1.org1.example.com
  	# 如果把Start注释去掉,那么会生成 peer5.org1.example.com 和 peer6.org1.example.com
    Template:
      Count: 2
      # Start: 5
      
    # Users是生成除了Admin之外多少个user,数量由Count决定
    # 对于orderer组织,这个值设置了也没有效果
    # 如果配置会在crypto-config/peerOrganizations/org1.example.com/users目录下,
    # 生成两个文件,分别是[email protected][email protected]
    # 如果改为2,那么会多一个[email protected]
    Users:
      Count: 1
	
		# 如下如果在这里加入一个Specs,那么会在peers目录下生成3个文件了
		# 包括,peer0.org2.example.com, peer1.org2.example.com 和 test.org2.example.com
  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: true
    # Specs:
    #  - Hostname: test
    Template:
      Count: 2
    Users:
      Count: 1

通常来说

  • Name和Domain是必须要有的
  • Specs中的配置和Template里的Count共同决定了,orderers或者是peers目录下的子目录数
  • 对于peer组织来说,Users里的count决定users目录下除了Admin以外的子目录数目

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							## 存放组织根证书及私钥
│       │   ├── ca.example.com-cert.pem		## 组织根证书,自签名
│       │   └── fe78d606843ca608b5eab2af24d09c51ebeac6fc6a31690c3ad77e55c2840835_sk	## 私钥
│       ├── msp							## 存放该组织身份信息
│       │   ├── admincerts	## 组织管理员
│       │   │   └── [email protected]-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		## 第一个orderer的信息,msp与TLS
│       │   │   ├── msp
│       │   │   │   ├── admincerts	## 组织管理员的身份验证证书,与 msp.admincerts 保持一致
│       │   │   |		|		└── [email protected]-cert.pem	## orderer被给予这些证书来确认交易签名是否为管理员签名
│       │   │   │   ├── cacerts		## 存放组织根证书,与CA目录里一致
│       │   │   │   │   └── ca.example.com-cert.pem
│       │   │   │   ├── config.yaml
│       │   │   │   ├── keystore	## 本节点的身份私钥,用来签名
│       │   │   │   │   └── 0396add7d5658fcae2bb73c34af1b8b459d88839b30cd61fab1d60d1c4c0b703_sk
│       │   │   │   ├── signcerts	## 验证本节点签名的证书,被根证书签名
│       │   │   │   │   └── orderer.example.com-cert.pem
│       │   │   │   └── tlscacerts	## TLS连接用的身份证书,与 msp.tlscacerts 保持一致
│       │   │   │       └── tlsca.example.com-cert.pem
│       │   │   └── tls		## TLS的相关信息
│       │   │       ├── ca.crt	## 组织的根证书
│       │   │       ├── server.crt	## 验证本节点签名的证书,被根证书签名
│       │   │       └── server.key	## 本节点的身份私钥,用来签名
##############################################
# orderer2 到 orderer5 的信息,具体意义与orderer一致
##############################################
│       ├── tlsca		## 存放tls相关的证书和私钥
│       │   ├── 4dbdd5747a94468bd84e0e8bbc39935e894d4c62de1c66a77d6ca66853a24e14_sk	## tls私钥
│       │   └── tlsca.example.com-cert.pem	## tls证书
│       └── users		## 存放属于该组织的用户的实体
│           └── [email protected]		## 管理员用户的信息,其中包括msp证书和tls证书两类
│               ├── msp
│               │   ├── admincerts  ## 组织管理员的身份验证证书,与 msp.admincerts 保持一致|		|		└── [email protected]-cert.pem
│               │   ├── cacerts    	## 存放组织根证书,与CA目录里一致
│               │   │   └── ca.example.com-cert.pem
│               │   ├── config.yaml
│               │   ├── keystore		## 本用户的身份私钥,用来签名
│               │   │   └── ceefe40caaf06d02d09b1c5776f5dbf0749e056d49fb12fbab23f32b470b4645_sk
│               │   ├── signcerts		## 验证本用户的身份验证证书,被根证书签名,要被某个Orderer认可,则必须放到该 Orderer 的msp/admincerts目录下,因此上面orderer的msp/admincerts目录下的证书应该要是从这里复制一份过去
│               │   │   └── [email protected]-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		## 存放私钥与组织根证书
    │   │   ├── ca.org1.example.com-cert.pem
    │   │   └── e693ef19f57ec58c0c33b51ccf04d12871a793f01c513affacea685e26bbcacc_sk
    │   ├── msp		## msp信息与order组织类似
    │   │   ├── admincerts
    │   |		|		└── [email protected]-cert.pem
    │   │   ├── cacerts
    │   │   │   └── ca.org1.example.com-cert.pem
    │   │   ├── config.yaml
    │   │   └── tlscacerts
    │   │       └── tlsca.org1.example.com-cert.pem
    │   ├── peers	## peers目录与order组织的orderers目录类似
    │   │   ├── peer0.org1.example.com
    │   │   │   ├── msp
    │   │   │   │   ├── admincerts
    │   |   │   │   |		└── [email protected]-cert.pem
    │   │   │   │   ├── cacerts
    │   │   │   │   │   └── ca.org1.example.com-cert.pem
    │   │   │   │   ├── config.yaml
    │   │   │   │   ├── keystore
    │   │   │   │   │   └── a77da4f8c714456e7518c5d72346d96954264a5e056c05615b8492c90ce1d90c_sk
    │   │   │   │   ├── signcerts
    │   │   │   │   │   └── peer0.org1.example.com-cert.pem
    │   │   │   │   └── tlscacerts
    │   │   │   │       └── tlsca.org1.example.com-cert.pem
    │   │   │   └── tls
    │   │   │       ├── ca.crt
    │   │   │       ├── server.crt
    │   │   │       └── server.key
    │   │   └── peer1.org1.example.com
    │   │       ├── msp
    │   │       │   ├── admincerts
    |   ||		└── [email protected]-cert.pem
    │   │       │   ├── cacerts
    │   │       │   │   └── ca.org1.example.com-cert.pem
    │   │       │   ├── config.yaml
    │   │       │   ├── keystore
    │   │       │   │   └── 97db71f3465954ed6822cfdc22879350fd3cf120442449c3053a56d6d3ab5241_sk
    │   │       │   ├── signcerts
    │   │       │   │   └── peer1.org1.example.com-cert.pem
    │   │       │   └── tlscacerts
    │   │       │       └── tlsca.org1.example.com-cert.pem
    │   │       └── tls
    │   │           ├── ca.crt
    │   │           ├── server.crt
    │   │           └── server.key
    │   ├── tlsca		## 存放tls相关的证书和私钥
    │   │   ├── e72ab83e95bd44cf98029e1b0fb1afb616295ce0cf82924daaa20a8d37988d70_sk
    │   │   └── tlsca.org1.example.com-cert.pem
    │   └── users
    │       ├── [email protected]
    │       │   ├── msp
    │       │   │   ├── admincerts
    │       │   │   |		└── [email protected]-cert.pem
    │       │   │   ├── cacerts
    │       │   │   │   └── ca.org1.example.com-cert.pem
    │       │   │   ├── config.yaml
    │       │   │   ├── keystore
    │       │   │   │   └── b919e8acaad2e62f8dce761b7e282bfbf5f427626457069effc44cd44b2db287_sk
    │       │   │   ├── signcerts
    │       │   │   │   └── [email protected]-cert.pem
    │       │   │   └── tlscacerts
    │       │   │       └── tlsca.org1.example.com-cert.pem
    │       │   └── tls
    │       │       ├── ca.crt
    │       │       ├── client.crt
    │       │       └── client.key
    │       └── [email protected]
    │           ├── msp
    │           │   ├── admincerts
    │   			  │   |		└── [email protected]-cert.pem
    │           │   ├── cacerts
    │           │   │   └── ca.org1.example.com-cert.pem
    │           │   ├── config.yaml
    │           │   ├── keystore
    │           │   │   └── 3700db6a19f25b2e22e0315b9fb15ecc3b3a18a14ef463f4b4f2f98e43240ef6_sk
    │           │   ├── signcerts
    │           │   │   └── [email protected]-cert.pem
    │           │   └── tlscacerts
    │           │       └── tlsca.org1.example.com-cert.pem
    │           └── tls
    │               ├── ca.crt
    │               ├── client.crt
    │               └── client.key
    └── org2.example.com
    ###########################
    # 以下内容与org1.example.com类似
    ###########################

做一个补充说明

  • 在一个组织内部(orderer的example.com,peer的org1.example.com,或peer的org2.example.com),所有的admincerts是一样的。admin的私钥在Users的Admin文件夹下
  • 在一个组织内部,所有的cacerts是一样的,ca的私钥在ca文件夹下
  • 在一个组织内部,所有的tlscacerts是一样的,且和tls文件夹下的ca.crt文件一样。tlsca的私钥在tlsca文件夹下

对于peer/orderer以及users来说,msp/keystore下是私钥,msp/signcerts下是证书。

tls下的server.key(peer下是client.key)和server.crt是私钥和证书

相关的证书配置

  • configtx.yaml,配外层的msp文件夹

    MSPDir: crypto-config/ordererOrganizations/example.com/msp
    
  • peer的core.yaml文件,使用peers下面的msp文件夹

    mspConfigPath: ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp
    
  • orderer的orderer.yaml文件,使用orderer下面的msp文件夹

    LocalMSPDir: ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp
    
  • client和sdk端,使用users下面的msp文件夹

    mspConfigPath: ../crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp
    
相关标签: 区块链 区块链