Skip to content

Latest commit

 

History

History
98 lines (79 loc) · 4.22 KB

File metadata and controls

98 lines (79 loc) · 4.22 KB

main.go

核心代码十分简单。

//command line flags
var (
	app = kingpin.New("cryptogen", "Utility for generating Hyperledger Fabric key material")

	gen        = app.Command("generate", "Generate key material")
	outputDir  = gen.Flag("output", "The output directory in which to place artifacts").Default("crypto-config").String()
	configFile = gen.Flag("config", "The configuration template to use").File()

	showtemplate = app.Command("showtemplate", "Show the default configuration template")
)

func main() {
	kingpin.Version("0.0.1")
	switch kingpin.MustParse(app.Parse(os.Args[1:])) {

	// "generate" command
	case gen.FullCommand():
		generate()

	// "showtemplate" command
	case showtemplate.FullCommand():
		fmt.Print(defaultConfig)
		os.Exit(0)
	}

}
generate

主要调用 generate() 方法。

  • 首先调用 getConfig()读取本地配置或使用默认配置。
  • 使用 renderOrgSpec() 和 generatePeerOrg()方法依次生成每个 peer 类型的组织。
  • 使用 renderOrgSpec() 和 generateOrdererOrg()方法依次生成每个 orderer 类型的组织。

renderOrgSpec()负责将模板中具体组织数据解析出来。

peer 组织

generatePeerOrg()会具体生成每个 peer 类型的组织,结构如下。

peerOrganizations:

  • org1:存放第一个组织的相关材料,每个组织会生成单独的根证书。
    • ca:存放组织的根证书和对应的私钥文件,默认采用 EC 算法,证书为自签名。组织内的实体将基于该根证书作为相同的证书根。
    • msp:存放代表该组织的身份信息
      • admincerts:组织管理员的身份验证证书。
      • cacerts:组织的根证书。
      • keystore:组织的私钥文件,用来签名。
      • signcerts:组织的签名验证证书。
    • peers:存放该组织下的所有 peer 节点
      • peer1:第一个 peer 的信息,包括 msp 证书和 tls 证书两类。
        • msp:
          • admincerts:组织管理员的身份验证证书。
          • cacerts:存放组织的根证书。
          • keystore:本节点的身份私钥,用来签名。
          • signcerts:验证本节点签名的证书,被组织根证书签名。
        • tls:存放 tls 相关的证书和私钥
          • ca.crt:组织的根证书。
          • server.crt:验证本节点签名的证书,被组织根证书签名。
          • server.key:本节点的身份私钥,用来签名。
    • users:存放属于该组织的用户的实体。
      • Admin:管理员用户的信息,包括 msp 证书和 tls 证书两类。
        • msp:
          • admincerts:组织根证书作为管理者身份验证证书。
          • cacerts:存放组织的根证书。
          • keystore:本用户的身份私钥,用来签名。
          • signcerts:管理员用户的身份验证证书,被组织根证书签名。
        • tls:存放 tls 相关的证书和私钥
          • ca.crt:组织的根证书。
          • server.crt:管理员的用户身份验证证书,被组织根证书签名。
          • server.key:管理员用户的身份私钥,用来签名。
      • User1:第一个用户的信息,包括 msp 证书和 tls 证书两类。
        • msp:
          • admincerts:组织根证书作为管理者身份验证证书。
          • cacerts:存放组织的根证书。
          • keystore:本用户的身份私钥,用来签名。
          • signcerts:验证本用户签名的身份证书,被组织根证书签名。
        • tls:存放 tls 相关的证书和私钥
          • ca.crt:组织的根证书。
          • server.crt:验证用户签名的身份证书,被组织根证书签名。
          • server.key:用户的身份私钥,用来签名。
  • org2
    • ...

注意每个实体(组织、节点、用户)最终都会拥有 MSP 来代表身份信息,其中包括三种证书:管理员身份的验证证书、实体信任的 CA 的根证书、自身身份验证(检查签名)的证书。此外,还包括对应身份验证的签名用的私钥。

GenerateVerifyingMSP()会生成组织的 MSP 信息。

generateNodes 会针对每个实体生成所需要的 msp 和 tls 信息,证书都会被组织根证书签名,信任的根都是组织 CA 证书。

orderer 组织

跟 peer 组织类似过程。