3.crypto-config.yaml配置文件分析和cryptogen工具使用[fabric2.2]
创始人
2024-05-28 17:21:22
0

在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: Org1Domain: org1.example.comEnableNodeOUs: 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: 1SANS:- 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
│           └── 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	#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 ###存放属于该组织的用户的实体│       ├── 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├── 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

拓展证书文件

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

$ cryptogen extend --help # 使用帮助命令查看参数
usage: cryptogen extend []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

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...