Hyperledger Fabric 生成组织身份解析

2024-01-09 06:21:36

fabric 版本 2.4.1

Fabric 网络通过证书和密钥来管理和认证成员身份,经常需要生成证书文件。通常这些操作可以使用 PKI 服务(如 Fabric-CA)或者 OpenSSL 工具来实现(针对单个证书的签发)。为了方便批量管理组织证书,Fabric 基于 Go 语言的标准 crypto 库提供了 cryptogen(crypto generator)工具。cryptogen 可以根据指定配置批量生成所需要的密钥和证书文件,或查看配置模板信息。

cryptogen 工具

usage: cryptogen [<flags>] <command> [<args> ...]

Utility for generating Hyperledger Fabric key material

Flags:
  --help  Show context-sensitive help (also try --help-long and --help-man).

Commands:
  help [<command>...]
    Show help.

  generate [<flags>]
    Generate key material

  showtemplate
    Show the default configuration template

  version
    Show version information

  extend [<flags>]
    Extend existing network
命令参数作用
generate--output (生成的身份信息文件存放目录,默认为 crypto-config) , --config (使用的 crypto-config.yaml 文件路径)N/A
showtemplateN/A显示默认配置模板
extend--input (身份信息文件存放目录,默认为 crypto-config) , --config (使用的 crypto-config.yaml 文件路径)N/A
versionN/A查看版本信息

showtemplate 会展示一个 crypto-config.yaml 配置文件模板,一般情况下,配置文件中会指定网络的拓扑结构,还可以指定两类组织的信息:

● OrdererOrgs,构成 Orderer 集群的节点所属组织。

● PeerOrgs,构成 Peer 集群的节点所属组织。

使用下面命令将 howtemplate 命令输出的内容输出到一个文件中:

cryptogen howtemplate > crypto-config.yaml
# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: example.com
    EnableNodeOUs: false

    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs below for complete description
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer

# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1
  # ---------------------------------------------------------------------------
  - Name: Org1
    Domain: org1.example.com
    EnableNodeOUs: false

    # ---------------------------------------------------------------------------
    # "CA"
    # ---------------------------------------------------------------------------
    # Uncomment this section to enable the explicit definition of the CA for this
    # organization.  This entry is a Spec.  See "Specs" section below for details.
    # ---------------------------------------------------------------------------
    # CA:
    #    Hostname: ca # implicitly ca.org1.example.com
    #    Country: US
    #    Province: California
    #    Locality: San Francisco
    #    OrganizationalUnit: Hyperledger Fabric
    #    StreetAddress: address for org # default nil
    #    PostalCode: postalCode for org # default nil

    # ---------------------------------------------------------------------------
    # "Specs"
    # ---------------------------------------------------------------------------
    # Uncomment this section to enable the explicit definition of hosts in your
    # configuration.  Most users will want to use Template, below
    #
    # Specs is an array of Spec entries.  Each Spec entry consists of two fields:
    #   - Hostname:   (Required) The desired hostname, sans the domain.
    #   - CommonName: (Optional) Specifies the template or explicit override for
    #                 the CN.  By default, this is the template:
    #
    #                              "{{.Hostname}}.{{.Domain}}"
    #
    #                 which obtains its values from the Spec.Hostname and
    #                 Org.Domain, respectively.
    #   - SANS:       (Optional) Specifies one or more Subject Alternative Names
    #                 to be set in the resulting x509. Accepts template
    #                 variables {{.Hostname}}, {{.Domain}}, {{.CommonName}}. IP
    #                 addresses provided here will be properly recognized. Other
    #                 values will be taken as DNS names.
    #                 NOTE: Two implicit entries are created for you:
    #                     - {{ .CommonName }}
    #                     - {{ .Hostname }}
    # ---------------------------------------------------------------------------
    # Specs:
    #   - Hostname: foo # implicitly "foo.org1.example.com"
    #     CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above
    #     SANS:
    #       - "bar.{{.Domain}}"
    #       - "altfoo.{{.Domain}}"
    #       - "{{.Hostname}}.org6.net"
    #       - 172.16.10.31
    #   - Hostname: bar
    #   - Hostname: baz

    # ---------------------------------------------------------------------------
    # "Template"
    # ---------------------------------------------------------------------------
    # Allows for the definition of 1 or more hosts that are created sequentially
    # from a template. By default, this looks like "peer%d" from 0 to Count-1.
    # You may override the number of nodes (Count), the starting index (Start)
    # or the template used to construct the name (Hostname).
    #
    # Note: Template and Specs are not mutually exclusive.  You may define both
    # sections and the aggregate nodes will be created for you.  Take care with
    # name collisions
    # ---------------------------------------------------------------------------
    Template:
      Count: 1
      # Start: 5
      # Hostname: {{.Prefix}}{{.Index}} # default
      # SANS:
      #   - "{{.Hostname}}.alt.{{.Domain}}"

    # ---------------------------------------------------------------------------
    # "Users"
    # ---------------------------------------------------------------------------
    # Count: The number of user accounts _in addition_ to Admin
    # ---------------------------------------------------------------------------
    Users:
      Count: 1

  # ---------------------------------------------------------------------------
  # Org2: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: false
    Template:
      Count: 1
    Users:
      Count: 1
配置项作用默认值
name组织的名称N/A
domain组织的域名N/A
EnableNodeOUs是否启用 NodeOU,指定是否根据证书中的 OU 域来判断持有者角色false
CA组织的 CA 地址,包括 Hostname 域
Specs.Hostname可以直接用 Hostname 多次指定若干节点N/A
Specs.CommonName(可选配置) 指定 CN 的模板或显式覆盖。模板:"{{. hostname}}.{{.Domain}}N/A
Specs.SANS这里可以配置节点支持的多个域名或者 IPN/A
Template指定自动生成节点的个数1
Users.Count顺序生成指定个数的普通用户(除默认的 Admin 用户外)1

SAN (Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析。SAN SSL 证书使您可以通过在注册时添加到 SAN 字段来确保域名和子域,本地主机名和 IP 地址的安全性,证书的安装过程和管理也更易于管理,也就是我们常说的多域名 SSL 证书。

生成网络身份信息文件:

cryptogen generate --config rypto-config.yaml --output crypto-config

crypto-config 目录结构:

crypto-config
├── ordererOrganizations
│?? └── example.com
│??     ├── ca
│??     │?? ├── ca.example.com-cert.pem
│??     │?? └── priv_sk
│??     ├── msp
│??     │?? ├── admincerts
│??     │?? ├── cacerts
│??     │?? │?? └── ca.example.com-cert.pem
│??     │?? ├── config.yaml
│??     │?? └── tlscacerts
│??     │??     └── tlsca.example.com-cert.pem
│??     ├── orderers
│??     │?? ├── orderer0.example.com
│??     │?? │?? ├── msp
│??     │?? │?? │?? ├── admincerts
│??     │?? │?? │?? ├── cacerts
│??     │?? │?? │?? │?? └── ca.example.com-cert.pem
│??     │?? │?? │?? ├── config.yaml
│??     │?? │?? │?? ├── keystore
│??     │?? │?? │?? │?? └── priv_sk
│??     │?? │?? │?? ├── signcerts
│??     │?? │?? │?? │?? └── orderer0.example.com-cert.pem
│??     │?? │?? │?? └── tlscacerts
│??     │?? │?? │??     └── tlsca.example.com-cert.pem
│??     │?? │?? └── tls
│??     │?? │??     ├── ca.crt
│??     │?? │??     ├── server.crt
│??     │?? │??     └── server.key
│??     │?? ├── orderer1.example.com
│??     │?? │?? ├── msp
│??     │?? │?? │?? ├── admincerts
│??     │?? │?? │?? ├── cacerts
│??     │?? │?? │?? │?? └── ca.example.com-cert.pem
│??     │?? │?? │?? ├── config.yaml
│??     │?? │?? │?? ├── keystore
│??     │?? │?? │?? │?? └── priv_sk
│??     │?? │?? │?? ├── signcerts
│??     │?? │?? │?? │?? └── orderer1.example.com-cert.pem
│??     │?? │?? │?? └── tlscacerts
│??     │?? │?? │??     └── tlsca.example.com-cert.pem
│??     │?? │?? └── tls
│??     │?? │??     ├── ca.crt
│??     │?? │??     ├── server.crt
│??     │?? │??     └── server.key
│??     │?? └── orderer2.example.com
│??     │??     ├── msp
│??     │??     │?? ├── admincerts
│??     │??     │?? ├── cacerts
│??     │??     │?? │?? └── ca.example.com-cert.pem
│??     │??     │?? ├── config.yaml
│??     │??     │?? ├── keystore
│??     │??     │?? │?? └── priv_sk
│??     │??     │?? ├── signcerts
│??     │??     │?? │?? └── orderer2.example.com-cert.pem
│??     │??     │?? └── tlscacerts
│??     │??     │??     └── tlsca.example.com-cert.pem
│??     │??     └── tls
│??     │??         ├── ca.crt
│??     │??         ├── server.crt
│??     │??         └── server.key
│??     ├── tlsca
│??     │?? ├── priv_sk
│??     │?? └── tlsca.example.com-cert.pem
│??     └── users
│??         └── Admin@example.com
│??             ├── msp
│??             │?? ├── admincerts
│??             │?? ├── cacerts
│??             │?? │?? └── ca.example.com-cert.pem
│??             │?? ├── config.yaml
│??             │?? ├── keystore
│??             │?? │?? └── priv_sk
│??             │?? ├── signcerts
│??             │?? │?? └── Admin@example.com-cert.pem
│??             │?? └── tlscacerts
│??             │??     └── tlsca.example.com-cert.pem
│??             └── tls
│??                 ├── ca.crt
│??                 ├── client.crt
│??                 └── client.key
└── peerOrganizations
    ├── org1.example.com
    │?? ├── ca
    │?? │?? ├── ca.org1.example.com-cert.pem
    │?? │?? └── priv_sk
    │?? ├── msp
    │?? │?? ├── admincerts
    │?? │?? ├── cacerts
    │?? │?? │?? └── ca.org1.example.com-cert.pem
    │?? │?? ├── config.yaml
    │?? │?? └── tlscacerts
    │?? │??     └── tlsca.org1.example.com-cert.pem
    │?? ├── peers
    │?? │?? ├── peer0.org1.example.com
    │?? │?? │?? ├── msp
    │?? │?? │?? │?? ├── admincerts
    │?? │?? │?? │?? ├── cacerts
    │?? │?? │?? │?? │?? └── ca.org1.example.com-cert.pem
    │?? │?? │?? │?? ├── config.yaml
    │?? │?? │?? │?? ├── keystore
    │?? │?? │?? │?? │?? └── priv_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
    │?? │??     │?? ├── cacerts
    │?? │??     │?? │?? └── ca.org1.example.com-cert.pem
    │?? │??     │?? ├── config.yaml
    │?? │??     │?? ├── keystore
    │?? │??     │?? │?? └── priv_sk
    │?? │??     │?? ├── signcerts
    │?? │??     │?? │?? └── peer1.org1.example.com-cert.pem
    │?? │??     │?? └── tlscacerts
    │?? │??     │??     └── tlsca.org1.example.com-cert.pem
    │?? │??     └── tls
    │?? │??         ├── ca.crt
    │?? │??         ├── server.crt
    │?? │??         └── server.key
    │?? ├── tlsca
    │?? │?? ├── priv_sk
    │?? │?? └── tlsca.org1.example.com-cert.pem
    │?? └── users
    │??     ├── Admin@org1.example.com
    │??     │?? ├── msp
    │??     │?? │?? ├── admincerts
    │??     │?? │?? ├── cacerts
    │??     │?? │?? │?? └── ca.org1.example.com-cert.pem
    │??     │?? │?? ├── config.yaml
    │??     │?? │?? ├── keystore
    │??     │?? │?? │?? └── priv_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
    │??         │?? ├── cacerts
    │??         │?? │?? └── ca.org1.example.com-cert.pem
    │??         │?? ├── config.yaml
    │??         │?? ├── keystore
    │??         │?? │?? └── priv_sk
    │??         │?? ├── signcerts
    │??         │?? │?? └── User1@org1.example.com-cert.pem
    │??         │?? └── tlscacerts
    │??         │??     └── tlsca.org1.example.com-cert.pem
    │??         └── tls
    │??             ├── ca.crt
    │??             ├── client.crt
    │??             └── client.key
    └── org2.example.com
        ├── ca
        │?? ├── ca.org2.example.com-cert.pem
        │?? └── priv_sk
        ├── msp
        │?? ├── admincerts
        │?? ├── cacerts
        │?? │?? └── ca.org2.example.com-cert.pem
        │?? ├── config.yaml
        │?? └── tlscacerts
        │??     └── tlsca.org2.example.com-cert.pem
        ├── peers
        │?? ├── peer0.org2.example.com
        │?? │?? ├── msp
        │?? │?? │?? ├── admincerts
        │?? │?? │?? ├── cacerts
        │?? │?? │?? │?? └── ca.org2.example.com-cert.pem
        │?? │?? │?? ├── config.yaml
        │?? │?? │?? ├── keystore
        │?? │?? │?? │?? └── priv_sk
        │?? │?? │?? ├── signcerts
        │?? │?? │?? │?? └── peer0.org2.example.com-cert.pem
        │?? │?? │?? └── tlscacerts
        │?? │?? │??     └── tlsca.org2.example.com-cert.pem
        │?? │?? └── tls
        │?? │??     ├── ca.crt
        │?? │??     ├── server.crt
        │?? │??     └── server.key
        │?? └── peer1.org2.example.com
        │??     ├── msp
        │??     │?? ├── admincerts
        │??     │?? ├── cacerts
        │??     │?? │?? └── ca.org2.example.com-cert.pem
        │??     │?? ├── config.yaml
        │??     │?? ├── keystore
        │??     │?? │?? └── priv_sk
        │??     │?? ├── signcerts
        │??     │?? │?? └── peer1.org2.example.com-cert.pem
        │??     │?? └── tlscacerts
        │??     │??     └── tlsca.org2.example.com-cert.pem
        │??     └── tls
        │??         ├── ca.crt
        │??         ├── server.crt
        │??         └── server.key
        ├── tlsca
        │?? ├── priv_sk
        │?? └── tlsca.org2.example.com-cert.pem
        └── users
            ├── Admin@org2.example.com
            │?? ├── msp
            │?? │?? ├── admincerts
            │?? │?? ├── cacerts
            │?? │?? │?? └── ca.org2.example.com-cert.pem
            │?? │?? ├── config.yaml
            │?? │?? ├── keystore
            │?? │?? │?? └── priv_sk
            │?? │?? ├── signcerts
            │?? │?? │?? └── Admin@org2.example.com-cert.pem
            │?? │?? └── tlscacerts
            │?? │??     └── tlsca.org2.example.com-cert.pem
            │?? └── tls
            │??     ├── ca.crt
            │??     ├── client.crt
            │??     └── client.key
            └── User1@org2.example.com
                ├── msp
                │?? ├── admincerts
                │?? ├── cacerts
                │?? │?? └── ca.org2.example.com-cert.pem
                │?? ├── config.yaml
                │?? ├── keystore
                │?? │?? └── priv_sk
                │?? ├── signcerts
                │?? │?? └── User1@org2.example.com-cert.pem
                │?? └── tlscacerts
                │??     └── tlsca.org2.example.com-cert.pem
                └── tls
                    ├── ca.crt
                    ├── client.crt
                    └── client.key

组织(例如:org1.example.com/) 相关身份文件目录 :

目录存放文件说明
ca存放组织的 CA 根证书和对应的私钥文件,默认采用 ECDSA 算法,证书为自签名。组织内的实体将该根证书作为证书根
msp存放代表该组织的身份信息,有时还存放中间层证书和运维证书
msp/admincerts组织管理员的身份验证证书,被根证书签名
msp/cacerts组织信任的 CA 根证书,同 ca 目录下文件
msp/tlscacerts用于 TLS 验证的信任的 CA 证书,自签名
msp/config.yaml指定是否开启 OU(OrganizationalUnit),以及存放组织根证书路径和 OU 识别关键字
users/Admin管理员用户的信息,包括其 MSP 证书和 TLS 证书
users/Admin/msp存放代表身份的相关证书和私钥文件
users/Admin/tls存放与 tls 相关的证书和私钥

其他用户身份文件目录和 Admin 类似。

组织节点(例如:org1.example.com/peers/peer0.org1.example.com/ ) 相关身份文件目录 :

目录存放文件说明
msp存放代表身份的相关证书和私钥文件
msp/admincerts该 Peer 认可的管理员的身份证书。Peer 将基于这里的证书来认证交易签署者是否为管理员身份。这里默认存放有组织 Admin 用户的身份证书。
msp/cacerts存放组织的 CA 根证书
msp/keystore节点的身份私钥,用来签名
msp/signcerts验证本节点签名的证书,被组织根证书签名
msp/tlscacertsTLS 连接用的 CA 证书,默认只有组织 TLSCA 证书
msp/ig.yaml指定是否开启 OU,以及存放组织根证书路径和 OU 识别关键字
tls存放与 tls 相关的证书和私钥
tls/ca.crt组织的 TLS CA 证书
tls/server.crt验证本节点签名的证书,被组织根证书签名
tls/server.key本节点的 TLS 私钥,用来签名

yamlspecsopenssl

? 著作权归作者所有

举报

文章来源:https://blog.csdn.net/y19910825/article/details/135468870
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。