3.crypto-config.yaml配置文件分析和cryptogen工具使用[fabric2.2]

在fabric网络启动的过程中,会使用使用cryptogen 工具创建组织的证书文件,这时候就会用到crypto-config.yaml配置文件,例如fabric官方测试例程test-network中就用到了crypto-config-org1.yaml,crypto-config-org2.yaml,crypto-config-orderer.yaml三个配置文件。

crypto-config.yaml配置文件的结构十分简单,用于定义OrdererOrgs和PeerOrgs组织。每个组织中又可以定义多个节点(Spec)和用户(User)。

下面来看一下crypto-config-org1.yaml,crypto-config-org2.yaml,crypto-config-orderer.yaml配置文件。(这个几个文件在 ./fabric-samples/test-network/organizations/cryptogen文件夹下面)

一、crypto-config.yaml有什么用?

Fabric网络通过证书和密钥来管理和认证成员身份,经常需要生成证书文件。为了方便批量管理组织证书,Fabric基于Go语言的标准crypto库提供了cryptogen(crypto generator)工具。cryptogen是静态产生fabric所需证书的工具,CA服务是一种动态的证书生产方式。一般来说在开发和测试阶段可以简单的使用cryptogen工具来产生所需要的证书,在生产网络中使用CA服务。

cryptogen可以根据指定配置(crypto-config.yaml)批量生成所需要的密钥和证书文件,或查看配置模板信息。

二、一些关键名词解释

了解这些名词,就很容易看懂配置模板信息。

  • OrdererOrgs:定义管理orderer节点的组织

  • PeerOrgs:定义管理peer节点的组织

  • 每个组织应该包含如下信息

    • 名称(name),组织的名称

    • 组织域(domain),组织的命名域

    • 是否启用NodeOU,指定是否根据证书中的OU域来判断持有者角色

    • CA,组织的CA地址,包括Hostname域。

    • 若干个节点,节点包括几个域(可以通过Specs来指定,或者通过Template来自动顺序生成)

      • Hostname 主机名
      • CommonName
      • SANS

      通过Template来自动顺序生成默认通用名为:主机名.组织域。

      例如,域org1.example.com中Peer节点的名称可能为peer0.org1.example.com、peer1.org1.example.comdeng等。

  • 用户,通过用户模板自动生成除admin外的用户个数。

三、crypto-config-oederer.yaml

# ---------------------------------------------------------------------------
# "OrdererOrgs" - 定义管理排序节点的组织
# ---------------------------------------------------------------------------
OrdererOrgs: # 定义OrdererOrgs类型组织
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer  # 组织名
    Domain: example.com  # 组织域名
    EnableNodeOUs: true  # 启动EnableNodeOUs在msp下生成config.yaml文件
    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs for complete description
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer #节点域名,可以指定多个节点
#      - Hostname: orderer1 # 举例
#      - Hostname: orderer2 # 举例
#      - Hostname: orderer3 # 举例

        SANS: # 除了主机名,通用名外的主题别名
          - localhost

四、crypto-config-org1.yaml

# ---------------------------------------------------------------------------
# "PeerOrgs" - 管理peer节点的组织的定义
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1 组织1,可以安装这个模板定义多个组织
  # ---------------------------------------------------------------------------
  - Name: Org1
    Domain: org1.example.com
    EnableNodeOUs: true
    # ---------------------------------------------------------------------------
    # "Specs"   过Specs来指定节点信息
    # ---------------------------------------------------------------------------
    # Uncomment this section to enable the explicit definition of hosts in your
    # configuration.  Most users will want to use Template, below
    #
    # Specs 是一个 Spec 条目数组。每个 Spec 条目由两个字段组成:
    #   - Hostname:   (必需)所需的主机名。
    #   - CommonName: (可选的) 对于一个Spec来说,配置了CommonName,那么文件夹则命名为CommonName
    #                  如果没有配置CommonName,则文件名为:{{.Hostname}}.{{Domain}}
    #
    #                   默认格式     "{{.Hostname}}.{{.Domain}}"
    #
    #                 which obtains its values from the Spec.Hostname and
    #                 Org.Domain, respectively.
    # ---------------------------------------------------------------------------
    #   - Hostname: foo # implicitly "foo.org1.example.com"
    #     CommonName: foo27.org5.example.com # overrides Hostname-based FQDN set above
    #   - Hostname: bar
    #   - Hostname: baz
    # ---------------------------------------------------------------------------
    # "Template" 或者通常Template生成节点
    # ---------------------------------------------------------------------------
    # 允许定义来自模板 1 个或多个按顺序创建的主机。
    # 默认情况下,这从peer0 到 peer{{Count-1}} 。
    # 可以设置起始索引(Start)
    #
    # Note: Template 和 Specs并不相斥.
    # 可以一起使用创建爱节点
    # 注意节点名称不要冲突
    # ---------------------------------------------------------------------------
    Template:
      Count: 1
      SANS:
        - localhost
      # Start: 5
      # Hostname: {{.Prefix}}{{.Index}} # 默认
    # ---------------------------------------------------------------------------
    # "Users"
    # ---------------------------------------------------------------------------
    # Count:除 Admin 之外的用户帐户数
    # ---------------------------------------------------------------------------
    Users:
      Count: 1

注意:

  • crypto-config-org2.yaml,crypto-config-orderer.yam基本相同
  • crypto-config-org1.yaml,crypto-config-org2.yaml,crypto-config-orderer.yaml三个文件的内容可以卸载一个文件中,比如写在crypto-config.yaml中,执行同时生成所有组织的秘钥证书中

五、cryptogen工具使用

cryptogen主要功能包括:

  • generate,生成密钥和证书文件。
  • showtemplate,查看配置模板的信息。
  • extend,扩展当前密钥和证书文件。
  • version,查看版本信息

可以使用:

cryptogen --help […] # 查看帮助信息,进行学习

例如:cryptogen --help generate

Generate key material # 作用生成关键材料

Flags: # 有的参数
–help Show context-sensitive help (also try --help-long and–help-man).
–output=“crypto-config” The output directory in which to place artifacts # 放置输出文件的目录文件夹
–config=CONFIG The configuration template to use #指定使用的配置模板

生成组织省份相关相关

使用命令生成相应的密钥和证书文件

cd /root/fabric/scripts/fabric-samples/test-network/organizations/cryptogen/crypto-config # 进入到存放证书配置文件的文件夹

cryptogen generate --config=./crypto-config-orderer.yaml # 生成orderer组织的证书文件
cryptogen generate --config=crypto-config-org1.yaml # 生成org1组织的证书文件
cryptogen generate --config=./crypto-config-org2.yaml # 生成org2组织的证书文件

可以看到当前目录下的生成crypto-config目录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kXcyTVG9-1677896503228)(assets/image-20230303111025-li3rvwb.png)]

crypto-config文件夹中生成ordererOrganizations和peerOrganizations两棵组织树。每棵组织树下都包括ca、tlsca、msp、orderers(或peers)、users等子目录。

最关键的是各个资源下的msp目录内容,存储了生成的代表MSP实体身份的各种证书文件,一般包括:

  • admincerts,管理员角色的身份证书文件。
  • cacerts,信任的CA根证书文件。
  • keystore,本实体的签名私钥文件。(签名)
  • signcerts,本实体的签名身份证书文件。(验证本节点)
  • tlscacerts,TLS连接信任的CA证书。
  • intermediatecerts(可选),信任的中间CA证书。
  • crls(可选),证书撤销列表。
  • config.yaml(可选),记录是否开启节点OU(Organizational Unit),根证书的位置和各个OU的OrganizationalUnitIdentif ier信息等。

peerOrganizations为例做了详细的注释。

[root@gtt crypto-config]# tree
.
├── 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
│       │   └── orderer.example.com
│       │       ├── msp
│       │       │   ├── admincerts
│       │       │   ├── cacerts
│       │       │   │   └── ca.example.com-cert.pem
│       │       │   ├── config.yaml
│       │       │   ├── keystore
│       │       │   │   └── priv_sk
│       │       │   ├── signcerts
│       │       │   │   └── orderer.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
│           └── [email protected]
│               ├── msp
│               │   ├── admincerts
│               │   ├── cacerts
│               │   │   └── ca.example.com-cert.pem
│               │   ├── config.yaml
│               │   ├── keystore
│               │   │   └── priv_sk
│               │   ├── signcerts
│               │   │   └── [email protected]
│               │   └── tlscacerts
│               │       └── tlsca.example.com-cert.pem
│               └── tls
│                   ├── ca.crt
│                   ├── client.crt
│                   └── client.key
└── peerOrganizations	#peer组织相关
    ├── org1.example.com   ##org1组织的相关材料
    │   ├── ca	###存放组织的CA根证书和对应的私钥文件     
    │   │   ├── ca.org1.example.com-cert.pem
    │   │   └── priv_sk
    │   ├── msp ###存放代表该组织的身份信息,有时还存放中间层证书和运维证书。
    │   │   ├── admincerts ####组织管理员的身份验证证书,被根证书签名。
    │   │   ├── cacerts  ####组织信任的CA根证书,同ca目录下文件
    │   │   │   └── ca.org1.example.com-cert.pem
    │   │   ├── config.yaml #### 指定是否开启OU(Organizational Unit),以及存放组织根证书路径和OU识别关键字
    │   │   └── tlscacerts  ####用于TLS验证的信任的CA证书,自签名
    │   │       └── tlsca.org1.example.com-cert.pem
    │   ├── peers ##存放属于该组织的所有Peer节点。
    │   │   └── peer0.org1.example.com ###第一个Peer节点,包括其MSP证书和TLS证书。
    │   │       ├── msp ####存放代表身份的相关证书和私钥文件
    │   │       │   ├── admincerts #####该Peer认可的管理员的身份证书。
    │   │       │   ├── cacerts  ######存放组织的CA根证书。
    │   │       │   │   └── ca.org1.example.com-cert.pem
    │   │       │   ├── config.yaml  #####指定是否开启OU
    │   │       │   ├── keystore  #####节点的身份私钥,用来签名。
    │   │       │   │   └── priv_sk
    │   │       │   ├── signcerts  #####验证本节点签名的证书,被组织根证书签名。
    │   │       │   │   └── peer0.org1.example.com-cert.pem
    │   │       │   └── tlscacerts  #####TLS连接用的CA证书
    │   │       │       └── tlsca.org1.example.com-cert.pem
    │   │       └── tls ####存放与tls相关的证书和私钥。
    │   │           ├── ca.crt  #####组织的TLS CA证书
    │   │           ├── server.crt  #####验证本节点签名的证书,被组织根证书签名。
    │   │           └── server.key  #####本节点的TLS私钥,用来签名。
    │   ├── tlsca ###存放属于该组织的TLS证书和对应私钥
    │   │   ├── priv_sk
    │   │   └── tlsca.org1.example.com-cert.pem
    │   └── users ###存放属于该组织的用户的实体
    │       ├── [email protected]
    │       │   ├── msp
    │       │   │   ├── admincerts #####管理员用户的信息
    │       │   │   ├── cacerts
    │       │   │   │   └── ca.org1.example.com-cert.pem
    │       │   │   ├── config.yaml
    │       │   │   ├── keystore
    │       │   │   │   └── priv_sk
    │       │   │   ├── signcerts
    │       │   │   │   └── [email protected]
    │       │   │   └── tlscacerts
    │       │   │       └── tlsca.org1.example.com-cert.pem
    │       │   └── tls
    │       │       ├── ca.crt
    │       │       ├── client.crt
    │       │       └── client.key
    │       └── [email protected]  #####第一个用户的信息
    │           ├── msp
    │           │   ├── admincerts
    │           │   ├── cacerts
    │           │   │   └── ca.org1.example.com-cert.pem
    │           │   ├── config.yaml
    │           │   ├── keystore
    │           │   │   └── priv_sk
    │           │   ├── signcerts
    │           │   │   └── [email protected]
    │           │   └── 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
        ├── tlsca
        │   ├── priv_sk
        │   └── tlsca.org2.example.com-cert.pem
        └── users
            ├── [email protected]
            │   ├── msp
            │   │   ├── admincerts
            │   │   ├── cacerts
            │   │   │   └── ca.org2.example.com-cert.pem
            │   │   ├── config.yaml
            │   │   ├── keystore
            │   │   │   └── priv_sk
            │   │   ├── signcerts
            │   │   │   └── [email protected]
            │   │   └── tlscacerts
            │   │       └── tlsca.org2.example.com-cert.pem
            │   └── tls
            │       ├── ca.crt
            │       ├── client.crt
            │       └── client.key
            └── [email protected]
                ├── msp
                │   ├── admincerts
                │   ├── cacerts
                │   │   └── ca.org2.example.com-cert.pem
                │   ├── config.yaml
                │   ├── keystore
                │   │   └── priv_sk
                │   ├── signcerts
                │   │   └── [email protected]
                │   └── tlscacerts
                │       └── tlsca.org2.example.com-cert.pem
                └── tls
                    ├── ca.crt
                    ├── client.crt
                    └── client.key

拓展证书文件

cryptogen extend用于扩展已有的密钥和证书文件

$ cryptogen extend --help # 使用帮助命令查看参数
usage: cryptogen extend [<flags>]

Extend existing network # 拓展存在的网络

Flags:
  --help                   Show context-sensitive help (also try --help-long and--help-man).
  --input="crypto-config"  当前已存在的密钥和证书文件的路径,默认为当前目录下的crypto-config目录。
  --config=CONFIG          指定所采用的配置模板文件的路径

# 例如,修改配置文件org3-crypto.yaml,添加新的组织org3,扩展已有的密钥和证书文件。
$ cryptogen extend --config ./org3-crypto.yaml --input crypto-config

在这里插入图片描述

查看配置模板信息和查看版本信息

# 这两个命令很简单,直接使用命令即可
$ cryptogen  showtemplate
$ cryptogen version

你可能感兴趣的:(fabric学习,fabric,docker)