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

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
    

猜你喜欢

转载自blog.csdn.net/lvyibin890/article/details/106213960