本指南将说明如何使用 Fabric CA 二进制文件为生产网络设置 Fabric CA。 在您掌握了使用这些二进制文件部署和运行 CA 之后,您可能会想要使用 Fabric CA 映像,例如在 Kubernetes 或 Docker 部署中。 不过,就目前而言,本指南的目的是教您如何正确使用二进制文件。 然后可以将该过程扩展到其他环境。
第一个主题向您介绍如何规划 CA 并确定您的组织所需的 CA 拓扑。 接下来,您应该查看生产 CA 服务器的清单,以了解 CA 最常见的配置参数以及它们如何相互交互。 最后,CA 部署步骤将引导您完成为生产网络配置 TLS CA、组织 CA 以及可选的中间 CA 的过程。 完成此配置后,您就可以使用组织 CA 或中间 CA(如果您创建一个)来为您的组织注册和注册身份。
规划 CA
受众:架构师、网络运营商、设置生产 Fabric 网络的用户,并且熟悉传输层安全性 (TLS)、公钥基础设施 (PKI) 和会员服务提供商 (MSP)。
这些部署说明提供了有关如何为生产网络部署 CA 的指导。 如果您需要快速建立网络以用于教育或测试目的,请查看 Fabric 测试网络。 虽然 Fabric CA 服务器仍然是 Hyperledger Fabric 的首选且经过测试的证书颁发机构,但您可以将来自非 Fabric CA 的证书用于您的 Fabric 网络; 但是,本部署指南的范围主要集中在使用 Fabric CA。 它侧重于您需要考虑的最重要的配置参数,并提供配置 CA 的最佳实践。
您可能已经熟悉 Fabric CA 用户指南 和 [操作指南](https://hyperledger -fabric-ca.readthedocs.io/en/latest/operations_guide.html)。本主题旨在在部署 CA 之前告知您的决策,并提供有关如何根据这些决策配置 CA 参数的指导。 当您做出决定时,您可能仍需要参考这些主题。
回想一下,Fabric CA 在区块链网络上执行以下功能:
- 身份注册,或连接到轻量级目录访问协议 (LDAP) 作为用户注册表。
- 颁发注册证书 (ECerts)。 注册是 Fabric CA 颁发证书密钥对的过程,由签名证书和形成身份的私钥组成。 Fabric CA 客户端首先在本地生成私钥和公钥,然后将公钥发送到 CA,CA 返回一个编码证书,即签名证书。
- 证书更新和撤销。
您有机会自定义这些函数的行为。 CA 第一次启动时,它会查找 fabric-ca-server-config.yaml 文件 包含 CA 配置参数。 如果该文件不存在,则会为您创建一个默认文件。 在部署 CA 之前,本主题提供有关该文件中的参数的指导,以及您需要做出的决定,以便根据您的用例自定义 CA。
您将在网络上使用哪种 CA 拓扑?
网络上 CA 的拓扑可能会有所不同,具体取决于参与网络的组织数量以及您希望如何管理 CA。
需要多少个 CA?
在配置 CA 之前,您需要了解您的网络需要多少个 CA。如果您阅读了部署过程概述,您会记得建议您为每个组织部署两个 CA,一个组织 CA 和一个 TLS CA。任何生产网络都需要 TLS 通信来保护组织中节点之间的通信。因此,颁发这些 TLS 证书的是 TLS CA。另一方面,组织 CA 用于生成组织和节点身份。此外,因为这是一个分布式分类帐,排序服务不应该与peer方属于同一组织,因此您需要为peer组织和排序服务组织使用不同的组织(因此需要 CA)。当多个组织向排序服务贡献节点时,每个排序节点将有自己的组织 CA。所有这些分离对于order服务和渠道的分布式管理至关重要,并且破坏了不良行为者破坏网络的能力。
为什么建议使用单独的 TLS 服务器?
单独的 TLS 服务器提供独立的信任链,仅用于保护通信。 大多数组织更喜欢通过单独的加密材料来保护 TLS 通信——来自不同的根、来自单独的 Fabric TLS CA 或另一个外部证书颁发机构。
Fabric 提供的一个选项是配置双头 CA 的能力,单个 CA 在幕后包括组织的身份注册 CA(以下称为组织 CA)和 TLS CA。 它们在相同的 CA 节点和端口上运行,但可以通过不同的 CA 名称寻址。 本主题稍后将详细讨论的 cafiles
参数允许每个 CA 拥有自己的配置,但当您希望两个 CA 共享相同的后端数据库时很有用。 因此,使用此选项,当部署组织 CA 时,TLS CA 会自动为您一起部署。
还值得注意的是,从功能的角度来看,Fabric 组织 CA 和 Fabric TLS CA 之间没有区别。 不同之处在于它们生成的证书类型。
我什么时候需要中间 CA?
中间 CA 是可选的。为了增加安全性,组织可以部署称为中间 CA 的 CA 链。中间 CA 的根证书由父 CA(根 CA)或另一个中间机构(成为父 CA)颁发,这为链中任何 CA 颁发的任何证书建立了“信任链”。因此,拥有一个或多个中间 CA 可以保护您的信任根。这种追溯根 CA 的能力不仅允许 CA 的功能扩展,同时仍然提供安全性——允许使用证书的组织放心地使用中间 CA——它限制了根 CA 的暴露,如果受到损害,将危及整个信任链。另一方面,如果中间 CA 受到损害,则暴露的风险会小得多。一个关键的好处是,在中间 CA 启动并运行后,可以有效地关闭根 CA,从而进一步限制其漏洞。
包含中间 CA 的另一个原因是当您拥有一个包含多个部门的非常大的组织并且您不希望单个 CA 为所有部门生成证书时。 中间 CA 提供了一种机制,用于将 CA 管理的证书范围限定为较小的部门或子组。 不需要中间 CA,但它们降低了风险和范围证书管理。 如果组织中只有少数成员,这种模式会引起很大的意外。 作为部署多个中间 CA 的替代方法,您可以改为使用“隶属关系”(类似于部门)配置 CA。 稍后当我们谈论“从属关系”时会对此进行更多介绍。
此外,在可以接受使用一个TLS CA颁发证书以确保整个组织的通信安全的情况下,中间CA使用相同的TLS CA作为根CA,而不是拥有自己的专用TLS CA是合理的。
应按什么顺序部署 CA?
如果双头 CA 未配置组织 CA 和 TLS CA,则 TLS CA 单独部署,需要在组织 CA 之前部署,以便为组织 CA 生成 TLS 证书。 部署 TLS CA 后,可以部署组织 CA,然后根据需要部署任何中间 CA。
决定用户注册表
由于 Fabric CA 控制组织的身份,因此您需要在配置 CA 之前决定您的用户注册表。 Fabric CA 服务器可以配置为使用数据库作为用户注册表,也可以配置为从轻量级目录访问协议 (LDAP) 服务器读取。 LDAP 是服务器数据存储和检索的行业标准,其中信息表示为分层树。 LDAP 协议用于在服务器上查找数据,在这种情况下,数据是用户和组,因此服务器是用户存储库。当 LDAP 服务器将成为您的用户存储库时,您将需要提供连接和配置详细信息。为 CA 配置 LDAP 后,它会在为该用户生成证书之前根据 LDAP 用户注册表验证身份,该过程称为“注册”。此外,从 LDAP 注册表检索的用户属性对于在智能合约中做出访问控制决策很有用。如果您想了解有关 LDAP 注意事项的更多信息,请参阅 配置 LDAP。
本部署指南演示了使用数据库配置用户注册表的过程。
关于配置的说明
可以通过三种方式在 Fabric CA 服务器和客户端上配置设置。 覆盖默认设置的优先顺序是:
- 使用 Fabric CA 服务器 CLI 命令。
- 使用环境变量覆盖配置文件设置。
- 修改配置文件。
此顺序意味着,从代码的角度来看,Fabric CA 服务器 CLI 命令上传递的任何标志都将覆盖环境变量(如果存在相同设置)以及配置文件中设置的默认值。同样,环境变量可用于覆盖配置文件中的设置。但是,不鼓励使用环境变量来修改配置设置,因为这些更改不会持久化,并且在以后没有设置或未设置为应有的值时可能会导致问题。了解配置文件中的参数及其对文件中其他参数设置的依赖关系非常重要。使用环境变量盲目地覆盖一个设置可能会影响另一个设置的功能。因此,建议您在启动服务器之前对配置文件中的设置进行修改,以熟悉可用设置及其工作方式。
请注意,某些配置设置存储在 CA 数据库中,这意味着启动 CA 后,无法再通过编辑配置文件或设置环境变量来覆盖设置。 受影响的参数在这些说明中都有说明。 在这些情况下,需要使用 Fabric CA 服务器 CLI 命令进行修改,并且具有不需要重新启动服务器的额外好处。
生产 CA 服务器的清单
当您准备构建生产 Fabric CA 服务器时,您需要考虑在 fabric-ca-server-config.yaml 文件中配置以下字段。 当您 初始化 CA 服务器时,会为您生成此文件,以便您可以 在实际启动服务器之前对其进行自定义。
此清单涵盖了用于设置生产网络的关键配置参数。 当然,您可以随时参考 fabric-ca-server-config.yaml 文件 了解更多参数或更多信息。 本主题中的参数列表包括:
- ca
- tls
- cafiles
- intermediate ca
- port
- user registry
- registry database
- LDAP
- affiliations
- csr
- signing
- bccsp
- cors
- cfg
- operations
- metrics
ca
ca:
# Name of this CA
name:
# Key file (is only used to import a private key into BCCSP)
keyfile:
# Certificate file (default: ca-cert.pem)
certfile:
# Chain file
chainfile:
首先为您的 CA 命名。 该名称通常表示该 CA 将服务的组织。 或者,如果这是一个 TLS CA,您可能希望在名称中指出这一点。 当 Fabric CA 客户端 --caname
参数针对此服务器的请求时,将使用此 ca.name
。 如果此 CA 的加密材料是在其他地方生成的,您可以提供文件的名称以及它们所在位置的完全限定路径或相对路径。 keyfile
参数是私钥,certfile
是公钥。
chainfile
参数仅适用于中间 CA。 启动中间 CA 时,CA 将在此参数指定的位置创建链文件。 该文件将包含以根证书和任何中间证书开头的受信任链的证书。
tls
tls:
# Enable TLS (default: false)
enabled: true
# TLS for the server's listening port
certfile:
keyfile:
clientauth:
type: noclientcert
certfiles:
配置此部分以启用 CA 的 TLS 通信。 启用 TLS 后,所有与 CA 进行交易的节点也需要启用 TLS。
tls.enabled
: 对于安全的生产环境,应通过在配置文件的tls
部分设置enabled: true
来启用 TLS 以实现节点之间的安全通信。 (请注意,默认情况下它是禁用的,这对于测试网络可能是可以接受的,但对于生产需要启用它。)此设置将配置“服务器端 TLS”,这意味着 TLS 将保证 server 的身份 客户端并在它们之间提供双向加密通道。tls.certfile
: 每个 CA 都需要在其 TLS CA 中注册和注册,然后才能与组织中的其他节点进行安全交易。 因此,在部署组织 CA 或中间 CA 之前,您必须先部署 TLS CA,然后向 TLS CA 注册和注册组织 CA 引导身份,以生成组织 CA 的 TLS 签名证书。 使用 Fabric CA 客户端生成证书时,会在FABRIC_CA_CLIENT_HOME
文件夹的指定 msp 目录下的signedcerts
文件夹中生成 TLS 签名证书。 例如:/msp/signcerts/cert.pem
。 然后,在这个tls.certfile
字段中,提供生成的 TLS 签名证书的名称和位置。 如果这是根 TLS CA,则此字段可以为空。tls.keyfile
: 与tls.certfile
类似,提供此 CA 生成的 TLS 私钥的名称和位置。 例如:/msp/keystore/87bf5eff47d33b13d7aee81032b0e8e1e0ffc7a6571400493a7c_sk
。 如果您使用的是 HSM 或者这是根 TLS CA,则此字段将为空白。
Note: 至少在生产网络中,应该启用“服务器端 TLS”。
如果服务器端 TLS 足以满足您的需求,那么您已完成本节。 如果您需要在网络中使用双向 TLS,则需要配置以下两个附加字段。 (默认情况下禁用相互 TLS。)
tls.clientauth.type
: 如果服务器还需要验证 client 的身份,则需要 mutual TLS (mTLS)。 配置 mTLS 后,客户端需要在 TLS 握手期间发送其证书。 要为 mTLS 配置 CA,请将clientauth.type
设置为RequireAndVerifyClientCert
。tls.clientauth.certfiles
: 仅对于 mTLS,提供服务器在验证客户端证书时使用的根证书颁发机构的 PEM 编码列表。 在虚线 yaml 列表中指定证书。
cafiles
cafiles:
如主题 Planning for a CA 中所述,可以使用 cafiles
参数 配置双头 CA – 单个 CA 包括组织 CA 和 TLS CA。 这种使用模式可以方便起见,允许每个 CA 维护自己的配置,但仍共享相同的后端用户数据库。 在 cafiles
参数中,输入第二个 CA 服务器的 fabric-ca-server-config.yaml
的路径,例如 TLS CA。 辅助 CA 的配置可以包含与主 CA 服务器配置文件中的所有相同元素,除了“端口”和“tls”部分。
如果这不是您的 CA 所需的配置,您可以将此参数的值留空。
intermediate CA
intermediate:
parentserver:
url:
caname:
enrollment:
hosts:
profile:
label:
tls:
certfiles:
client:
certfile:
keyfile:
不需要中间 CA,但为了降低您的组织(根)CA 受到威胁的风险,您可能希望在您的网络中包含一个或多个中间 CA。
Important: 在设置中间 CA 之前,您需要验证父 CA 中的 csr.ca.pathlength
参数的值。 当设置为“0”时,组织 CA 可以颁发中间 CA 证书,但这些中间 CA 可能不会依次注册其他中间 CA。 如果您希望您的中间 CA 能够注册其他中间 CA,则需要将根 ca csr.ca.pathlength
设置为 1
。 如果您希望这些中间 CA 注册其他中间 CA,则需要将根 ca csr.ca.pathlength
设置为 2
。
parentserver.url
: 以https://<PARENT-CA-ENROLL-ID>:<PARENT-CA-SECRET>@<PARENT-CA-URL>:<PARENT-CA-PORT>
的格式指定父服务器 url。parentserver.caname
: 输入父 CA 服务器的“ca.name”。enrollment.profile:
: 输入父 CA 的“signing.profile”值。 通常这将是“ca”。tls.certfiles
: 输入 TLS CA 签名证书的位置和名称,“ca-cert.pem”文件。 例如,tls/ca-cert.pem
。 此位置相对于服务器配置 .yaml 文件所在的位置。
除了编辑此“中间”部分之外,您还需要编辑此中间 CA 的配置 .yaml 文件的以下部分:
csr
- 确保“csr.cn”字段为空。port
- 请务必为中间 CA 设置唯一端口。signing
- 仅当中间 CA 将作为其他中间 CA 的父 CA 时,验证根 CA 中的“isca”设置为“true”,并且“maxpathlen”设置为大于“0”,否则应设置为“ 0`。 请参阅 签名 参数。
port
port:
每个 CA 必须在其自己的唯一端口上运行,并且显然不能与在该端口上运行的任何其他服务发生冲突。 您需要提前决定要用于 CA 的端口,并在 .yaml 文件中配置该端口。
user registry
registry:
# Maximum number of times a password/secret can be reused for enrollment
# (default: -1, which means there is no limit)
maxenrollments: -1
# Contains identity information which is used when LDAP is disabled
identities:
- name: <<<adminUserName>>>
pass: <<<adminPassword>>>
type: client
affiliation: ""
attrs:
hf.Registrar.Roles: "*"
hf.Registrar.DelegateRoles: "*"
hf.Revoker: true
hf.IntermediateCA: true
hf.GenCRL: true
hf.Registrar.Attributes: "*"
hf.AffiliationMgr: true
如果您不使用 LDAP 用户注册表,则需要此部分以及相关的注册表数据库 db:
部分。 此部分可用于在服务器启动时向 CA 注册用户列表。 请注意,它只是注册用户而不为他们生成注册证书。 您使用 Fabric CA 客户端生成关联的注册证书。
maxenrollments
: 用于限制可以使用注册 ID 和密钥为用户生成证书的次数。 reenroll 命令可用于获取证书,没有任何限制。identities
: 本节定义启动 CA 时要注册的用户列表及其相关属性。 运行fabric-ca-server init
命令后,此处的<<<adminUserName>>>
和<<<adminPassword>>>
将替换为使用指定的 CA 服务器引导身份用户和密码 命令上的 -b
选项。identities.type
: 对于 Fabric,有效类型列表是client
、peer
、admin
、orderer
和member
。affiliation
: 选择要与关联的name:
参数指定的用户关联的从属关系。 可能的从属关系列表在“从属关系:”部分中定义。attrs
: 上面包含的角色列表适用于“管理员”用户,这意味着他们可以注册和注册其他用户。 如果您正在注册非管理员用户,则不会授予他们这些权限。 与身份关联的“hf”属性会影响该身份注册其他用户的能力。 您应该查看有关 [注册新身份] (https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#registering-a-new-identity) 的主题以了解以下模式 是必须的。
当用户随后“注册”时,type
、affiliation
和 attrs
在用户的签名证书中可见,并被策略用于强制授权。 回想一下,“注册”是 Fabric CA 颁发证书密钥对的过程,由签名证书和形成身份的私钥组成。 Fabric CA 客户端首先在本地生成私钥和公钥,然后将公钥发送到 CA,CA 返回一个编码证书,即签名证书。
用户注册后,您可以使用 Identity
命令修改 用户。
registry database
db:
type: sqlite3
datasource: fabric-ca-server.db
tls:
enabled: false
certfiles:
client:
certfile:
keyfile:
Fabric CA 将用户身份、从属关系、凭证和公共证书存储在数据库中。 使用此部分指定用于存储 CA 数据的数据库类型。 Fabric 支持三种数据库类型:
sqlite
(SQLite Version 3)postgres
(PostgresSQL)mysql
(MySQL)
如果您在集群中运行数据库,则必须选择 postgres
或 mysql
作为数据库类型。
如果 LDAP 被用作用户注册表(由 ldap.enabled:true
指定),则忽略此部分。
LDAP
ldap:
# Enables or disables the LDAP client (default: false)
# If this is set to true, the "registry" section is ignored.
enabled: false
# The URL of the LDAP server
url: ldap://<adminDN>:<adminPassword>@<host>:<port>/<base>
# TLS configuration for the client connection to the LDAP server
tls:
certfiles:
client:
certfile:
keyfile:
# Attribute related configuration for mapping from LDAP entries to Fabric CA attributes
attribute:
# 'names' is an array of strings containing the LDAP attribute names which are
# requested from the LDAP server for an LDAP identity's entry
names: ['uid','member']
# The 'converters' section is used to convert an LDAP entry to the value of
# a fabric CA attribute.
# For example, the following converts an LDAP 'uid' attribute
# whose value begins with 'revoker' to a fabric CA attribute
# named "hf.Revoker" with a value of "true" (because the boolean expression
# evaluates to true).
# converters:
# - name: hf.Revoker
# value: attr("uid") =~ "revoker*"
converters:
- name:
value:
# The 'maps' section contains named maps which may be referenced by the 'map'
# function in the 'converters' section to map LDAP responses to arbitrary values.
# For example, assume a user has an LDAP attribute named 'member' which has multiple
# values which are each a distinguished name (i.e. a DN). For simplicity, assume the
# values of the 'member' attribute are 'dn1', 'dn2', and 'dn3'.
# Further assume the following configuration.
# converters:
# - name: hf.Registrar.Roles
# value: map(attr("member"),"groups")
# maps:
# groups:
# - name: dn1
# value: peer
# - name: dn2
# value: client
# The value of the user's 'hf.Registrar.Roles' attribute is then computed to be
# "peer,client,dn3". This is because the value of 'attr("member")' is
# "dn1,dn2,dn3", and the call to 'map' with a 2nd argument of
# "group" replaces "dn1" with "peer" and "dn2" with "client".
maps:
groups:
- name:
value:
如果配置了 LDAP 注册表,则 registry 部分中的所有设置都将被忽略。
affiliations
affiliations:
org1:
- department1
- department2
org2:
- department1
隶属关系有助于为组织指定子部门。 然后可以从策略定义中引用它们,例如,当您可能希望交易由不仅是 ORG1 的成员,而且是 ORG1.MANUFACTURING 的成员的peer方背书时。 请注意,注册商的从属关系必须等于或作为被注册身份的从属关系的前缀。 如果您正在考虑使用从属关系,则应查看有关 [注册新身份] 的主题(https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#registering-a-new-identity ) 的要求。 要了解有关如何在 MSP 中使用从属关系的更多信息,请参阅关于 组织单位 (OU) 和 MSP 的 MSP 关键概念主题 .html#organizational-units-ous-and-msps)。
上面列出的默认从属关系会在服务器第一次启动时添加到 Fabric CA 数据库中。 如果您不想在您的服务器上拥有这些从属关系,则需要编辑此配置文件并在第一次启动服务器之前*删除或替换它们。 否则,您必须使用 Fabric CA 客户端 Affiliation command 来修改从属关系列表。 默认情况下,不能从配置中删除从属关系,而是必须显式启用该功能。 请参阅 cfg 部分,了解有关配置允许删除从属关系的能力的说明。
csr (certificate signing request)
csr:
cn: <<<COMMONNAME>>>
keyrequest:
algo: ecdsa
size: 256
names:
- C: US
ST: "North Carolina"
L:
O: Hyperledger
OU: Fabric
hosts:
- <<<MYHOST>>>
- localhost
ca:
expiry: 131400h
pathlength: <<<PATHLENGTH>>>
CSR 部分控制根 CA 证书的创建。 因此,如果您想自定义任何值,建议您在第一次启动服务器之前配置此部分。 您在此处指定的值将包含在生成的签名证书中。 如果在启动服务器后自定义 CSR 的值,则需要删除 ca.cert
文件和 ca.key
文件,然后再次运行 fabric-ca-server start
命令。
- csr.cn: 此字段必须设置为 CA 引导标识的 ID,并且可以留空。 它默认为 CA 服务器引导标识。
- csr.keyrequest:如果您想自定义加密 [算法和密钥大小](https://hyperledger-fabric-ca.readthedocs.io/en/latest/users-guide.html#initializing-the-server),请使用这些值。
- csr.names: 指定要用于证书颁发者的值,在签名证书中可见。
- csr.hosts: 提供服务器将在其上运行的主机名。
- csr.expiry: 指定此 CA 的根证书何时到期。 默认值
131400h
是 15 年。 - csr.pathlength: 如果您将有一个中间 CA,请在根 CA 中将此值设置为“1”。 如果这是一个中间 CA,则该值将为“0”,除非它将作为另一个中间 CA 的父 CA。
signing
signing:
default:
usage:
- digital signature
expiry: 8760h
profiles:
ca:
usage:
- cert sign
- crl sign
expiry: 43800h
caconstraint:
isca: true
maxpathlen: 0
maxpathlenzero: true
tls:
usage:
- signing
- key encipherment
- server auth
- client auth
- key agreement
expiry: 8760h
本节中的默认值通常足以满足生产服务器的需要。 但是,您可能希望修改生成的组织 CA 和 TLS 证书的默认到期时间。 请注意,这与 CA 根证书的 csr
部分中指定的 expiry
不同。
如果这是 TLS CA,建议您从 profiles:
中删除 ca
部分,因为 TLS CA 应该只颁发 TLS 证书。
如果您计划拥有多于一级的中间 CA,则必须在根 CA 的配置 .yaml 文件中将“maxpathlen”设置为大于“0”。 该字段表示证书链中可以跟在该证书之后的非自发中间证书的最大数量。 例如,如果您计划在此根 CA 下拥有中间 CA,则可以将“maxpathlen”设置为“0”。 但是,如果您希望您的中间 CA 作为另一个中间 CA 的父 CA,那么 maxpathlen
应该设置为 1
。
要强制 0
的 maxpathlen
,您还需要将 maxpathlenzero
设置为 true。 如果 maxpathlen
大于 0
,则 maxpathlenzero
应设置为 false
。
bccsp
bccsp:
default: SW
sw:
hash: SHA2
security: 256
filekeystore:
# The directory used for the software file-based keystore
keystore: msp/keystore
本节中的信息控制 CA 私钥的存储位置。 上述配置导致私钥存储在 CA 服务器的文件系统中的 msp/keystore
文件夹中。 如果您计划使用硬件安全模块 (HSM),则配置会有所不同。 当您为 CA 配置 HSM 时,CA 私有 密钥由 HSM 生成并存储在 HSM 中,而不是 msp/keystore
文件夹中。 softHSM 的 HSM 配置示例类似于:
bccsp:
default: PKCS11
pkcs11:
Library: /etc/hyperledger/fabric/libsofthsm2.so
Pin: 71811222
Label: fabric
hash: SHA2
security: 256
Immutable: false
cors
cors:
enabled: false
origins:
- "*"
可以将跨域资源共享 (CORS) 配置为使用额外的 HTTP 标头来告诉浏览器让在一个来源上运行的 Web 应用程序可以访问来自不同来源的选定资源。 origins
参数包含允许访问资源的域列表。
cfg
cfg:
affiliations:
allowremove: false
identities:
allowremove: false
这两个参数未在示例配置文件中列出,但理解起来很重要。 将默认配置设置为 false,如果不重新启动服务器,您将无法删除从属关系或身份。 如果您预计需要在不重新启动服务器的情况下从生产环境中删除从属关系或身份,则在启动服务器之前应将这两个字段都设置为“true”。 请注意,服务器启动后,只能使用 Fabric CA 客户端 CLI 命令修改从属关系和身份。
operations
operations:
# host and port for the operations server
listenAddress: 127.0.0.1:9443
# TLS configuration for the operations endpoint
tls:
# TLS enabled
enabled: false
# path to PEM encoded server certificate for the operations server
cert:
file:
# path to PEM encoded server key for the operations server
key:
file:
# require client certificate authentication to access all resources
clientAuthRequired: false
# paths to PEM encoded ca certificates to trust for client authentication
clientRootCAs:
files: []
操作服务可用于 CA 的健康监控,并依赖双向 TLS 与节点通信。 因此,您需要将 operations.tls.clientAuthRequired
设置为 true
。 当此设置为“真”时,尝试确定节点健康状况的客户端需要提供有效证书以进行身份验证。 如果客户端不提供证书或服务无法验证客户端的证书,则请求被拒绝。 这意味着客户端将需要向 TLS CA 注册并在请求中提供其 TLS 签名证书。
如果两个 CA 在同一台机器上运行,您需要修改“listenAddress:”,以便第二个 CA 使用不同的端口。 否则,当你启动第二个 CA 时,它会启动失败,并报告‘绑定地址已被使用’。
metrics
metrics:
# statsd, prometheus, or disabled
provider: disabled
# statsd configuration
statsd:
# network type: tcp or udp
network: udp
# statsd server address
address: 127.0.0.1:8125
# the interval at which locally cached counters and gauges are pushed
# to statsd; timings are pushed immediately
writeInterval: 10s
# prefix is prepended to all emitted statsd metrics
prefix: server
如果您想监控 CA 的指标,请选择您的指标提供商:
- provider:
Statsd
是推模型,Prometheus
是拉模型。 因为 Prometheus 是一个拉模型,所以 Fabric CA 服务器端不需要任何配置。 相反,Prometheus 向操作 URL 发送请求以轮询指标。 可用指标。
下一步
在决定您的 CA 配置后,您就可以部署您的 CA。 按照下一个 CA 部署步骤主题中的说明启动 CA。
CA 部署步骤
下载二进制文件
Fabric CA 服务器和 CA 客户端二进制文件可以从 github 下载。 向下滚动到 Assets 并为您的机器类型选择最新的二进制文件。 .zip 文件包含 CA 服务器和 CA 客户端二进制文件。 在您掌握了使用这些二进制文件部署和运行 CA 之后,您可能会想要使用 Fabric CA 映像,例如在 Kubernetes 或 Docker 部署中。 不过,就目前而言,本主题的目的是教您如何正确使用二进制文件。
服务器二进制文件
在本主题中,我们使用服务器二进制文件来部署三种不同类型的 CA:TLS CA、组织 CA 和可选的中间 CA。 TLS CA 颁发证书以确保组织中所有节点之间的通信安全。 组织 CA 颁发身份证书。 如果您决定包含中间 CA,则组织 CA 将充当中间 CA 的根 CA 或父服务器。 如果您还没有,您应该查看关于 规划 CA 的主题以了解 每种 CA 的用途及其差异。 我们从不同的文件夹运行 TLS CA、组织 CA 和中间 CA。 我们将 CA 服务器二进制文件复制到每个文件夹。
客户端二进制文件
同样,我们将 Fabric CA 客户端二进制文件复制到它自己的目录中。 将 CA 客户端放在自己的文件夹中有助于证书管理,尤其是当您需要与多个 CA 交互时。 当您从 CA 客户端向 CA 服务器发出命令时,您可以通过修改请求中的 CA 服务器 URL 来定位特定 CA。 因此,只需要一个 Fabric CA 客户端二进制文件即可用于与多个 CA 进行交易。 更多关于使用下面的 Fabric CA 客户端。
Fabric CA 客户端
在部署 Fabric CA 服务器之前,您需要了解 Fabric CA 客户端的作用。虽然您可以使用 Fabric SDK 与您的 CA 交互,但建议您使用 Fabric CA 客户端来注册和注册节点管理员身份。本主题中提供的说明假定正在使用单个 Fabric CA 客户端。注册身份或用户是将注册 ID 和机密添加到 CA 数据库“用户注册表”的过程。如果您将 LDAP 服务器用于用户注册表,则不需要注册步骤,因为身份已存在于 LDAP 数据库中。注册用户后,您可以使用 Fabric CA 客户端“注册”身份,这是生成身份需要作为组织的一部分进行交易的证书的过程。当您提交注册请求时,Fabric CA 客户端首先在本地生成私钥和公钥,然后将公钥发送到 CA,CA 返回一个编码的“签名证书”。
因为您将使用单个 CA 客户端向多个 CA 提交注册和注册请求,所以在使用 CA 客户端时证书管理至关重要。 因此,最佳实践是为 CA 客户端将与之交互的每个 CA 服务器创建子文件夹,以存储生成的证书。
-
创建一个子文件夹以连接到每个 CA 服务器,例如
/tls-ca
或/org1-ca
或/int-ca
。 此文件夹可以位于 Fabric CA 客户端下或 CA 客户端可以访问路径的任何位置。 出于这些说明的目的,这些文件夹位于“fabric-ca-client”目录中。 例如:mkdir fabric-ca-client cd fabric-ca-client mkdir tls-ca org1-ca int-ca
提示: 虽然您可以从您喜欢的任何文件夹中运行 Fabric CA 客户端二进制文件,但为了便于遵循这些说明,我们将在其名为“fabric-ca-client”的目录中引用它。
-
将 Fabric CA 客户端二进制文件复制到“fabric-ca-client”文件夹中。
-
由于在生产网络上启用了 TLS 通信,因此组织的 TLS CA 负责生成保护组织中所有节点之间通信的证书。 因此,Fabric CA 客户端每次与该组织中的 CA 服务器进行交易时,都需要提供 TLS CA “根证书”以保护客户端-服务器通信。 例如,当 Fabric CA 客户端向 CA 服务器发出注册或注册请求时,客户端请求包括该根证书以执行 SSL 握手。 在服务器配置 .yaml 文件中启用 TLS 后,将在 TLS CA 上生成名为“ca-cert.pem”的 TLS CA 根证书。 要为您的 CA 客户端启用 TLS 通信,您需要一个
tls-root-cert
子文件夹来存储根证书。 在本主题的后面,我们会将根证书复制到此文件夹中。mkdir tls-root-cert
生成的文件夹结构类似于:
fabric-ca-client ├── int-ca ├── org1-ca ├── tls-ca └── tls-root-cert
重要提示: 如果您的 Fabric CA 客户端将与来自多个受不同 TLS 服务器保护的组织的 CA 进行交易,那么您需要创建不同的 tls-root-cert
文件夹来保存 TLS CA 根证书 每个组织或只是在文件夹中以不同的方式命名它们以区分它们。 由于我们的 Fabric CA 客户端只会与同一组织中的 CA 服务器进行交易,所有这些服务器都由同一个 TLS CA 保护,因此我们在此文件夹中只有一个根证书。
您可以在 CLI 命令上使用环境变量或标志来指定证书和 Fabric CA 客户端二进制文件的位置:
FABRIC_CA_CLIENT_HOME
- 指定 Fabric CA 客户端二进制文件所在的完全限定路径。FABRIC_CA_CLIENT_TLS_CERTFILES
- 指定 TLS CA 根证书的位置和名称。 如果环境变量FABRIC_CA_CLIENT_TLS_CERTFILES
的路径不是绝对路径,它将被解析为相对于FABRIC_CA_CLIENT_HOME
指定的 Fabric CA 客户端主目录。 在这些说明中,我们使用命令上的--tls.certfiles
标志来指定 TLS CA 根证书的位置。FABRIC_CA_CLIENT_MSPDIR
- 虽然您可以使用此环境变量来指定证书所在文件夹的名称,但由于客户端与多个 CA 通信,更好的选择是在 register 上显式传递--mspdir
标志并将命令注册到 指定位置。 如果未在命令中指定,则位置默认为$FABRIC_CA_CLIENT_HOME/msp
,如果 Fabric CA 客户端与组织中的多个 CA 服务器进行交易,这将是有问题的。
提示: 第一次从 CA 客户端发出 enroll
命令时,如果 $FABRIC_CA_CLIENT_HOME
目录中不存在 fabric-ca-client-config.yaml
,则会生成它。 当您自定义此文件中的值时,CA 客户端会自动使用它们,并且不必在后续的“注册”命令中通过命令行传递。
在这些说明中使用单个 Fabric CA 客户端与多个 CA 服务器交互,但不一定是必需的模式。 另一种选择是为每个 CA 服务器提供一个 Fabric CA 客户端。 在这种情况下,当为 CA 服务器管理员发出初始注册命令时,会生成 Fabric CA 客户端与服务器的连接设置并将其存储在 fabric-ca-client-config.yaml
文件中。
从 CLI 提交事务
CA 服务器和 CA 客户端二进制文件包含两组 CLI 命令:
- 使用 Fabric CA server CLI 命令 部署和更新 CA 服务器。
- 使用 Fabric CA client CLI 命令 在您的 CA 服务器设置后提交请求,例如 如注册、登记或撤销身份。
我们将在本主题中使用这两个 CLI 命令。
我应该按什么顺序部署 CA?
假设您没有部署同时包含 TLS CA 和组织 CA 的双头 CA,您将按以下顺序部署 CA:
-
部署 TLS CA
由于生产网络中需要 TLS 通信,因此必须在每个 CA、peer节点和排序节点上启用 TLS。 虽然 CA 操作指南中的示例配置在所有组织之间共享一个 TLS CA,但推荐的生产配置是为每个组织部署一个 TLS CA。 TLS CA 颁发 TLS 证书以保护网络上所有节点之间的通信。 因此,需要首先部署它来为节点之间发生的 TLS 握手生成 TLS 证书。
-
部署组织 CA
这是组织的身份注册 CA,用于注册和注册将从该组织参与网络的身份。
-
部署中间 CA(可选)
如果您决定在网络中包含中间 CA,则必须在任何中间 CA 之前部署中间 CA 的父服务器(关联的根 CA)。
部署 TLS CA
无论您是设置 TLS CA、组织 CA 还是中间 CA,该过程都遵循相同的总体步骤。 不同之处在于您对 CA 服务器配置 .yaml 文件所做的修改。 以下步骤概述了该过程:
当您部署任何节点时,您有 TLS 配置的三个选项:
- 没有 TLS。 不推荐用于生产网络。
- 服务器端 TLS。
- 双向 TLS。
此过程将配置一个启用了服务器端 TLS 的 CA,推荐用于生产网络。 默认情况下禁用双向 TLS。 如果需要使用双向 TLS,请参考【TLS 配置设置】(https://hyperledger-fabric-ca.readthedocs.io/en/latest/deployguide/ca-config.html#tls)。
在你开始之前
您应该已经下载并复制了 Fabric CA 服务器二进制文件“fabric-ca-server”到您机器上的一个干净目录中。 出于这些说明的目的,我们将二进制文件放在名为“fabric-ca-server-tls”的自己的文件夹中。
mkdir fabric-ca-server-tls
将“fabric-ca-server”二进制文件复制到此文件夹中。
初始化 TLS CA 服务器
部署 CA 服务器的第一步是“初始化”它。 运行以下 CA 服务器 CLI 命令,通过指定 CA 的管理员用户 ID 和密码来初始化服务器:
./fabric-ca-server init -b <ADMIN_USER>:<ADMIN_PWD>
例如:
cd fabric-ca-server-tls
./fabric-ca-server init -b tls-admin:tls-adminpw
-b
(引导身份)标志将管理员用户名和密码引导到 CA 服务器,它有效地为您向服务器“注册”CA 管理员用户,因此不需要显式 Fabric CA 客户端 CLI register
命令 引导用户。 所有 CA 用户都需要在 CA 中“注册”然后“注册”,除了这个 CA 管理员身份,它是使用 -b
标志隐式注册的。 注册过程将用户插入 CA 数据库。 配置 LDAP 时,初始化不需要 -b
选项。
注意:此示例仅用于说明目的。 显然,在生产环境中,您永远不会使用 tls-admin
和 tls-adminpw
作为引导用户名和密码。 请务必记录您指定的管理员 ID 和密码。 稍后当您针对 CA 发出注册和注册命令时需要它们。 它可以帮助使用有意义的 id 来区分您正在与哪个服务器进行交易并遵循安全密码做法。
CA 服务器的“init”命令有什么作用?
init
命令实际上并不启动服务器,但如果服务器不存在所需的元数据,则生成所需的元数据:
- 将默认的 CA 主目录(在这些说明中称为
FABRIC_CA_HOME
)设置为运行fabric-ca-server init
命令的位置。 - 生成默认配置文件“fabric-ca-server-config.yaml”,该文件用作“FABRIC_CA_HOME”目录中服务器配置的模板。 我们在这些说明中将此文件称为“配置 .yaml”文件。
- 如果 CA 主目录中不存在 TLS CA 根签名证书文件“ca-cert.pem”,则创建它。 这是自签名根证书,这意味着它由 TLS CA 本身生成和签名,而不是来自其他来源。 该证书是必须与希望与组织中的任何节点进行交易的所有客户端共享的公钥。 当任何客户端或节点向另一个节点提交交易时,它必须将此证书作为交易的一部分。
- 生成 CA 服务器私钥并将其存储在
/msp/keystore
下的FABRIC_CA_HOME
目录中。 - 为服务器初始化默认 SQLite 数据库,尽管您可以修改配置 .yaml 文件中的数据库设置以使用您选择的受支持数据库。 每次启动服务器时,它都会从该数据库中加载数据。 如果您稍后切换到不同的数据库,例如 PostgreSQL 或 MySQL,并且配置 .yaml 文件的
registry.identites
部分中定义的身份在该数据库中不存在,它们将被注册。 - 将由
-b
标志参数<ADMIN_USER>
和<ADMIN_PWD>
指定的 CA 服务器管理员引导到服务器上。 当 CA 服务器随后启动时,管理员用户将使用配置 .yaml 文件“注册表”部分中提供的管理员属性进行注册。 如果此 CA 将用于注册具有任何这些属性的其他用户,则 CA 管理员用户需要拥有这些属性。 换句话说,注册商必须具有hf.Registrar.Roles
属性,然后才能使用这些属性中的任何一个注册另一个身份。 因此,如果此 CA 管理员将用于为中间 CA 注册管理员身份,则此 CA 管理员必须将hf.IntermediateCA
设置为true
,即使这可能不是中间 CA 服务器。 默认设置已包含这些属性。
重要:当您修改配置.yaml文件中的设置并重新启动服务器时,之前颁发的证书不会被替换。 如果希望在服务器启动时重新生成证书,则需要删除它们并运行 fabric-ca-server start
命令。 例如,如果在启动服务器后修改了csr
的值,则需要删除之前生成的证书,然后运行fabric-ca-server start
命令。 但请注意,当您使用新的签名证书和私钥重新启动 CA 服务器时,所有以前颁发的证书将不再能够通过 CA 进行身份验证。
修改 TLS CA 服务器配置
现在您已经初始化了您的服务器,您可以编辑生成的 fabric-ca-server-config.yaml
文件,根据 [生产 CA 服务器的清单](https://hyperledger-fabric-ca.readthedocs.io/en/latest/deployguide/ca-config.html)。
您您至少应该执行以下操作:
port
- 输入要用于此服务器的端口。 这些说明使用“7054”,但您可以选择您的端口。tls.enabled
- 回想一下,默认配置文件中禁用了 TLS。 由于这是一个生产服务器,请通过将此值设置为true
来启用它。 将此值设置为true
会导致在下一步启动服务器时生成 TLS 签名证书tls-cert.pem
文件。tls-cert.pem
是服务器将在 TLS 握手期间提供给客户端的证书,然后客户端将使用 TLS CA 的ca-cert.pem
进行验证。ca.name
- 通过编辑参数为 CA 命名,例如“tls-ca”。csr.hosts
- 更新此参数以包含此服务器正在运行的主机名和 IP 地址,如果它与此文件中已有的不同。 当您在下一步启动服务器时,当服务器创建其自签名 TLS 证书 tls-cert.pem 时,主机名将用于指定主题备用名称。signing.profiles.ca
- 由于这是一个不会颁发 CA 证书的 TLS CA,因此可以删除“ca”配置文件部分。signing.profiles
块应该只包含tls
配置文件。operations.listenAddress:
- 万一在此主机和端口上运行另一个节点,则需要更新此参数以使用不同的端口。
删除 TLS CA 服务器证书
在启动服务器之前,如果您修改了配置 .yaml 文件的 csr
块中的任何值,则需要删除 fabric-ca-server-tls/ca-cert.pem
文件和整个 fabric-ca-server-tls/msp
文件夹。 这些证书将在您在下一步启动 CA 服务器时重新生成。
启动 TLS CA 服务器
运行以下命令启动 CA 服务器:
./fabric-ca-server start
服务器成功启动后,您将看到类似以下内容:
[INFO] Listening on https://0.0.0.0:7054
因为您已启用 TLS 通信但尚未指定 TLS 证书文件,请注意 TLS 签名证书 tls-cert.pem
文件是在 FABRIC_CA_HOME
位置下生成的。
提示: 在 init
命令上设置的 CA ADMIN_USER
和 ADMIN_PWD
不能被此 start
命令上的 -b
标志覆盖。 当您需要修改 CA 管理员密码时,请使用 Fabric CA 客户端 identity 命令。
可选标志:
-d
- 如果您想以有助于问题诊断的调试模式运行服务器,您可以在启动命令中包含-d
标志。 但是,通常不建议在启用调试的情况下运行服务器,因为这会导致服务器运行速度变慢。-p
- 如果您希望服务器在与配置 .yaml 文件中指定的端口不同的端口上运行,您可以覆盖现有端口。
使用 TLS CA 注册引导管理员身份
现在您的 TLS CA 已配置好,在您可以为您的组织部署任何其他节点之前,您需要注册 TLS CA 的引导管理员身份。 由于 CA 服务器已启动并正在运行,我们现在使用 Fabric CA 客户端 CLI 命令 向 TLS CA 服务器提交注册请求,而不是使用Fabric CA 服务器 CLI 命令。
通过使用 Fabric CA 客户端执行,注册过程用于生成形成 TLS CA 引导管理员身份的证书和私钥对。 您应该已经在 Fabric CA 客户端 部分设置了所需的文件夹。
我们用于这些 Fabric CA 客户端命令的文件夹结构是:
fabric-ca-client
└── tls-ca
└── tls-root-cert
Fabric CA 客户端使用这些文件夹来:
- 存储在针对 TLS CA 服务器运行 Fabric CA 客户端注册命令以注册 TLS CA 引导管理员身份时颁发的证书。 (tls-ca 文件夹)
- 了解允许 Fabric CA 客户端与 TLS CA 服务器通信的 TLS CA 根证书所在的位置。 (tls-root-cert 文件夹)
-
将 TLS CA 服务器启动时生成的 TLS CA 根证书文件
fabric-ca-server-tls/ca-cert.pem
复制到fabric-ca-client/tls-root-cert/tls -ca-cert.pem
文件夹。 请注意,文件名已更改为“tls-ca-cert.pem”,以明确这是来自 TLS CA 的根证书。 重要提示: 每个将针对 TLS CA 运行命令的客户端系统都需要提供此 TLS CA 根证书。 -
Fabric CA 客户端还需要知道 Fabric CA 客户端二进制文件的位置。
FABRIC_CA_CLIENT_HOME
环境变量用于设置位置。export FABRIC_CA_CLIENT_HOME=<FULLY-QUALIFIED-PATH-TO-FABRIC-CA-BINARY>
例如,如果您在
fabric-ca-client
文件夹中,您可以使用:export FABRIC_CA_CLIENT_HOME=$PWD
-
您已准备好使用 Fabric CA 客户端 CLI 注册 TLS CA 引导管理员身份。 运行命令:
./fabric-ca-client enroll -d -u https://<ADMIN>:<ADMIN-PWD>@<CA-URL>:<PORT> --tls.certfiles <RELATIVE-PATH-TO-TLS-CERT> --enrollment.profile tls --mspdir tls-ca/tlsadmin/msp
代替:
<ADMIN>
- 使用init
命令中指定的 TLS CA 管理员。<ADMIN-PWD>
- 使用init
命令中指定的 TLS CA 管理员密码。<CA-URL>
- 使用 TLS CA 配置 .yaml 文件的“csr”部分中指定的主机名。<PORT>
- 使用 TLS CA 正在侦听的端口。<RELATIVE-PATH-TO-TLS-CERT>
- 使用从 TLS CA 复制的根 TLS 证书文件的路径和名称。 此路径相对于“FABRIC_CA_CLIENT_HOME”。 如果您遵循本教程中的文件夹结构,它将是tls-root-cert/tls-ca-cert.pem
。
例如:
./fabric-ca-client enroll -d -u https://tls-admin:tls-adminpw@my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --enrollment.profile tls --mspdir tls-ca/tlsadmin/msp
在这种情况下,
-d
参数在调试模式下运行客户端,这对于调试注册失败很有用。请注意,命令上使用了
--mspdir
标志来指定存储由注册命令生成的 TLS CA 管理员证书的位置。指定了
--enrollment.profile tls
标志,因为我们正在针对 TLS CA 进行注册。 使用此标志意味着根据配置 .yaml 文件的signing
部分中定义的 TLS 配置文件的usage
和expiry
设置执行注册。 注意: 如果您从 TLS CA 配置 .yaml 文件中删除了signing.profiles.ca
块,则可以省略--enrollment.profile tls
标志。当此命令成功完成时,会生成
fabric-ca-client/tls-ca/tlsadmin/msp
文件夹,其中包含 TLS CA 引导管理员身份的签名证书和私钥。 如果由于某种原因注册命令失败,为避免以后混淆,您应该在重新尝试注册命令之前从fabric-ca-client/tls-ca/admin/msp/keystore
文件夹中删除生成的私钥。 稍后当需要向 TLS CA 注册其他身份时,我们将参考此加密材料。提示: 从 Fabric CA 客户端发出第一个
enroll
命令后,检查生成的fabric-ca-client/fabric-ca-client-config.yaml
文件的内容以熟悉 Fabric CA 客户端使用的默认设置。 因为我们使用单个 Fabric CA 客户端与多个 CA 服务器交互,所以我们需要在客户端 CLI 命令上使用-u
标志来定位正确的 CA 服务器。 结合起来,“--mspdir”标志指示要在“注册”命令中使用的加密材料的位置,或者在“注册”命令中存储生成的证书的位置。
下图是您为创建 TLS CA 服务器和使用 Fabric CA 客户端注册引导管理员身份而执行的步骤的概念摘要:
向 TLS CA 注册和注册组织 CA 引导标识
TLS CA 服务器以引导管理员身份 (tlsadmin) 启动,该身份具有服务器的完全管理员权限。 管理员的一项关键能力是注册新身份的能力。 将在网络上进行交易的组织中的每个节点(orderers、peer、组织 CA)都需要向 TLS CA 注册,以便每个节点都可以注册以获取其 TLS 证书。 因此,在我们设置组织 CA 之前,我们需要使用 TLS CA 来注册和注册组织 CA 引导身份,以获取其 TLS 证书和私钥。 在下一步中,组织 CA 引导管理员用户将被命名为“rcaadmin”,因此我们将使用相同的名称为组织 CA 生成 TLS 身份。 以下命令向 TLS CA 注册组织 CA 引导身份 rcaadmin
和密码 rcaadminpw
。
./fabric-ca-client register -d --id.name rcaadmin --id.secret rcaadminpw -u https://my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --mspdir tls-ca/tlsadmin/msp
请注意,命令上的 --mspdir
标志指向我们在上一步中生成的 TLS CA admin msp 证书的位置。 该加密材料需要能够向 TLS CA 注册节点。
接下来,我们需要将“rcaadmin”身份注册到 TLS CA,以便为组织 CA 服务器生成 TLS 证书。 在这种情况下,我们在注册命令上使用 --mspdir
标志来指定生成的组织 CA TLS 证书应该存储在 rcaadmin
身份的位置。 因为这些证书用于不同的身份,所以最好将它们放在自己的文件夹中。 因此,我们不会在默认的“msp”文件夹中生成它们,而是将它们放在一个名为“rcaadmin”的新文件夹中,该文件夹位于“tlsadmin”文件夹旁边。 另请注意,因为我们正在生成 TLS 证书,所以我们必须通过 --csr.hosts 来指定生成的 TLS 证书中的主题备用名称。 主机必须与客户端在与组织 CA 服务器通信时将使用的主机名匹配,以使 TLS 握手成功。
./fabric-ca-client enroll -d -u https://rcaadmin:rcaadminpw@my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --enrollment.profile tls --csr.hosts 'host1,*.example.com' --mspdir tls-ca/rcaadmin/msp
在这种情况下,--mspdir
标志的工作方式略有不同。 对于注册命令,--mspdir
标志指示存储为 rcaadmin
身份生成的 TLS 证书的位置。
重要提示: 组织 CA TLS 签名证书在 fabric-ca-client/tls-ca/rcaadmin/msp/signcert
下生成,私钥在 fabric-ca-client/tls-ca/ 下可用 rcaadmin/msp/keystore
。 在下一步部署组织 CA 时,您需要将这些文件复制到组织 CA 目录下,并在组织 CA 配置 .yaml 文件的 tls
部分中引用它们。 为了便于参考,您可以将 keystore
文件夹中的文件重命名为 key.pem
。
(可选)向 TLS CA 注册和注册中间 CA 管理员
同样,如果您计划拥有一个可以代表组织 CA 颁发证书的中间 CA,您现在也应该注册并注册中间 CA 管理员用户。 以下命令向 TLS CA 注册中间 CA admin id icaadmin
和 icaadminpw
。 您可以使用为身份名称和密码选择的任何值。
./fabric-ca-client register -d --id.name icaadmin --id.secret icaadminpw -u https://my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --mspdir tls-ca/tlsadmin/msp
同样, register 命令上的 --mspdir
标志指向 TLS CA admin msp 证书的位置,这些证书需要能够向 TLS CA 注册其他用户。
现在也是通过注册用户为“icaadmin”用户生成中间 CA TLS 证书的好时机。 对于注册命令,我们使用 --mspdir
标志来指定应为 icaadmin
用户存储生成的中间 CA TLS 证书的位置。 在这种情况下,我们将它们放入一个名为 icaadmin/msp
的新文件夹中,该文件夹位于 tlsadmin
文件夹旁边。
./fabric-ca-client enroll -d -u https://icaadmin:icaadminpw@my-machine.example.com:7054 --tls.certfiles tls-root-cert/tls-ca-cert.pem --enrollment.profile tls --csr.hosts 'host1,*.example.com' --mspdir tls-ca/icaadmin/msp
重要提示: 中间 CA TLS 签名证书在 fabric-ca-client/tls-ca/icaadmin/signcert
下生成,私钥在 fabric-ca-client/tls-ca/icaadmin/ 下可用 密钥库
。 部署中间 CA 时,您需要在中间 CA 配置 .yaml 文件的 tls
部分中引用这两个文件。 为了便于参考,您可以将 keystore
文件夹中的文件重命名为 key.pem
。
生成的文件夹结构类似于:
fabric-ca-client
└── tls-ca
└── tlsadmin
└── msp
└── rcaadmin
└── msp
└── icaadmin
└── msp
└── tls-root-cert
└── tls-ca-cert.pem
提示: 向 TLS CA 注册所有节点后,可以安全地关闭它。
部署组织 CA
部署过程概述描述了每个组织对组织 CA 和 TLS CA 的需求。 TLS CA 颁发允许在组织内进行安全交易的 TLS 证书。 组织 CA,也称为“注册 CA”或“eCert CA”,用于为组织颁发身份。 您在上一组步骤中部署了 TLS CA,现在我们已准备好部署组织 CA。 在本主题的后面部分,您可以选择创建一个中间 CA; 因此,该 CA 充当该信任链中的“根 CA”。
因为您已经在上一步中向 TLS CA 注册并注册了您的组织 CA 引导身份 rcaadmin
,所以您已经拥有组织 CA 的 TLS 证书,并且可以按照相同的步骤模式部署组织 CA 部署 TLS CA 时使用的。
在你开始之前
-
将 Fabric CA 服务器二进制文件“fabric-ca-server”复制到您机器上的新目录中。 出于这些说明的目的,我们将二进制文件放在名为“fabric-ca-server-org1”的自己的文件夹中。
mkdir fabric-ca-server-org1
现在,将
fabric-ca-server
二进制文件复制到此文件夹中。 -
使用以下命令,将您在上一步中生成的组织 CA TLS 证书和密钥对复制到此 CA 服务器可以访问的位置,例如“fabric-ca-server-org1/tls”。 这些是由注册生成的
fabric-ca-client/tls-ca/rcaadmin/msp/signcerts/cert.pem
和fabric-ca-client/tls-ca/rcaadmin/msp/keystore/
文件 命令。注意: 以下命令假定:
fabric-ca-client/tls-ca/rcaadmin/msp/keystore/
下生成的私钥被重命名为key.pem
。fabric-ca-client
和fabric-ca-server-org1
文件夹在您的文件结构中处于同一级别。
cd fabric-ca-server-org1 mkdir tls cp ../fabric-ca-client/tls-ca/rcaadmin/msp/signcerts/cert.pem tls && cp ../fabric-ca-client/tls-ca/rcaadmin/msp/keystore/key.pem tls
生成的文件夹结构类似于下图。 (为清楚起见,省略了一些文件夹和文件):
fabric-ca-client └── tls-ca ├── rcaadmin ├── msp ├── IssuerPublicKey ├── IssuerRevocationPublicKey ├── cacerts ├── keystore └── key.pem ├── signcerts └── cert.pem fabric-ca-server-org1 └── tls └── cert.pem └── key.pem
初始化 CA 服务器
运行命令初始化服务器,为 CA 指定一个新的管理员用户 ID 和密码。 我们使用在上一组步骤中向 TLS CA 注册的身份“rcaadmin”作为组织 CA 的引导身份。 从 fabric-ca-server-org1
文件夹运行此命令。
./fabric-ca-server init -b <ADMIN_USER>:<ADMIN_PWD>
例如:
./fabric-ca-server init -b rcaadmin:rcaadminpw
修改 CA 服务器配置
就像我们对 TLS CA 所做的那样,我们需要编辑为组织 CA 生成的“fabric-ca-server-config.yaml”文件,以根据 [生产 CA 服务器的检查表] 修改您的用例的默认配置设置 ](https://hyperledger-fabric-ca.readthedocs.io/en/latest/deployguide/ca-config.html)。
至少,您应该编辑以下字段:
port
- 输入要用于此服务器的端口。 这些说明使用“7055”,但您可以选择您的端口。tls.enabled
- 通过将此值设置为true
来启用 TLS。tls.certfile
andtls.keystore
- 输入当该 CA 的引导管理员注册到 TLS CA 时生成的 TLS CA 签名证书和私钥的相对路径和文件名。 签名证书“cert.pem”是使用 Fabric CA 客户端生成的,可以在“fabric-ca-client/tls-ca/rcaadmin/msp/signcerts/cert.pem”下找到。 私钥位于“fabric-ca-client/tls-ca/rcaadmin/msp/keystore”下。 指定的路径名是相对于“FABRIC_CA_CLIENT_HOME”的,因此如果您遵循这些说明中使用的文件夹结构,您可以简单地为“tls.certfile”和“tls/key.pem”指定“tls/cert.pem” 对于tls.keystore
或者您可以指定完全限定的路径名。ca.name
- 通过在此参数中指定一个值来为组织 CA 命名,例如org1-ca
。csr.hosts
- 通常,此参数应该是运行此服务器的主机名和 IP 地址,以便可以将其注入 TLS 证书主题备用名称,但是在这种情况下,服务器不会生成自己的 TLS 证书(它已经从 TLS 生成 CA),因此不需要配置。csr.ca.pathlength
: 该字段用于限制 CA 证书层次结构。 将此值设置为根 CA 的“1”意味着根 CA 可以颁发中间 CA 证书,但这些中间 CA 不能反过来颁发其他 CA 证书。 换句话说,中间 CA 不能注册其他中间 CA,但它可以为用户颁发注册证书。 默认值为“1”。signing.profiles.ca.caconstraint.maxpathlen
- 该字段表示证书链中可以跟在该证书之后的非自发中间证书的最大数量。 **如果这将是中间 CA 的父服务器,并且您希望该中间 CA 充当另一个中间 CA 的父 CA,则此根 CA 需要在配置 .yaml 文件中将此值设置为大于 0。 ** 请参阅 签名 部分的说明。 默认值为“0”。operations.listenAddress:
- 如果在此主机上运行另一个 CA,则需要更新此参数以使用不同的端口。
删除 CA 服务器证书
在启动服务器之前,如果您修改了配置 .yaml 文件的 csr
块中的任何值,则需要删除 fabric-ca-server-org1/ca-cert.pem
文件和整个 fabric-ca-server-org1/msp
文件夹。 当您在下一步启动 CA 服务器时,这些证书将根据配置 .yaml 文件中的新设置重新生成。
启动 CA 服务器
运行以下命令启动 CA 服务器:
./fabric-ca-server start
注册 CA 管理员
部署 CA 的最后一步是注册 CA 管理员引导身份(rcaadmin 用户)。 这将生成 rcaadmin 用户的签名证书和私钥。 需要密钥对,以便 rcaadmin 用户随后可以在组织中注册和注册其他身份。 我们将再次使用 Fabric CA 客户端 CLI 来注册管理员。 您应该已经在 Fabric CA 客户端 部分设置了所需的文件夹。
我们用于这些命令的文件夹结构是:
fabric-ca-client
└── org1-ca
└── tls-root-cert
Fabric CA 客户端使用这些文件夹来:
- 存储对组织 CA 服务器运行 Fabric CA 客户端注册命令时颁发的证书。 (org1-ca 文件夹)
- 了解允许 Fabric CA 客户端与 TLS CA 服务器通信的 TLS 证书所在的位置。 (tls-root-cert 文件夹)
-
当您之前使用 Fabric CA 客户端为 TLS CA 生成证书时,您指定了
FABRIC_CA_CLIENT_HOME
的值。 假设仍然设置,您可以继续下一步。 否则,您应该在 Fabric CA 客户端二进制文件所在的目录中并运行以下命令:export FABRIC_CA_CLIENT_HOME=$PWD
-
现在您可以使用 Fabric CA 客户端生成 CA 管理员证书和私钥。 您需要此证书和私钥才能使用此 CA 颁发身份。 我们在注册命令上使用
--mspdir
标志来指定存储生成的证书的位置。 运行命令:./fabric-ca-client enroll -d -u https://<ADMIN>:<ADMIN-PWD>@<CA-URL>:<PORT> --tls.certfiles <RELATIVE-PATH-TO-TLS-CERT> --mspdir org1-ca/rcaadmin/msp
代替:
<ADMIN>
- 使用在“init”命令中指定的组织 CA 管理员。<ADMIN-PWD>
- 使用在“init”命令中指定的组织 CA 管理员密码。<CA-URL>
- 带有组织 CA 的主机名。<PORT>
- 使用组织 CA 正在侦听的端口。<RELATIVE-PATH-TO-TLS-CERT>
- 包含您从 TLS CA 复制的 tls-ca-cert.pem 文件的路径。 这是相对于“FABRIC_CA_CLIENT_HOME”的路径。
在这种情况下,
-d
参数在调试模式下运行客户端,这对于调试命令失败很有用。例如:
./fabric-ca-client enroll -d -u https://rcaadmin:rcaadminpw@my-machine.example.com:7055 --tls.certfiles tls-root-cert/tls-ca-cert.pem --mspdir org1-ca/rcaadmin/msp
当此命令运行时,注册命令会创建
fabric-ca-client/org1-ca/rcaadmin/msp
文件夹并包含组织 CA 的签名证书和私钥,看起来类似于:└── msp ├── cacerts └── my-machine-example-com-7055.pem ├── keystore └── 60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk ├── signcerts └── cert.pem ├── user ├── IssuerPublicKey └── IssuerRevocationPublicKey
Where:
my-machine-example-com-7055.pem
是组织 CA 根证书。60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk
是组织 CA 管理员身份的私钥。 此密钥需要受到保护,不应与任何人共享。 需要能够向此 CA 注册和注册其他身份。 随意将此文件重命名为更易于引用的名称,例如org1-key.pem
。cert.pem
是 CA 管理员身份签名证书。
-
(可选)向组织(根)CA 注册中间 CA 引导标识。
如果您计划部署中间 CA,则必须向其根 CA 注册中间 CA 引导标识,以形成信任链。 回想一下,您已经向 TLS CA 注册了“icaadmin”身份。 您还需要向(根)组织 CA 注册相同的身份。 因为这将是一个中间 CA,所以您必须包含
hf.IntermediateCA=true
属性。 (从您在上一步中注册组织 CA 管理员的同一终端窗口运行此命令。)./fabric-ca-client register -u https://my-machine.example.com:7055 --id.name icaadmin --id.secret icaadminpw --id.attrs '"hf.Registrar.Roles=user,admin","hf.Revoker=true","hf.IntermediateCA=true"' --tls.certfiles tls-root-cert/tls-ca-cert.pem --mspdir org1-ca/rcaadmin/msp
register 命令上的
--mspdir
标志指向我们在上一步中注册的组织 CA 管理员的加密材料,并被授权注册新用户。 我们不会向组织 CA 注册“icaadmin”身份。 而是稍后针对中间 CA 注册此中间 CA 管理员身份。
(可选)部署中间 CA
中间 CA 与组织根 CA 形成信任链,可用于将特定组织的注册请求定向到单个 CA,并通过关闭根 CA 来保护信任根。 因此,当使用中间 CA 处理所有注册请求时,可以关闭根 CA。
注意: 本部分假设您已经[注册并注册](https://hyperledger-fabric-ca.readthedocs.io/en/latest/deployguide/cadeploy.html#optional-register-and-enroll -the-intermediate-ca-admin-with-the-tls-ca) TLS CA 以及父组织 CA 的“icaadmin”身份(本节之前的步骤 3)。
在你开始之前
-
将 Fabric CA 服务器二进制文件“fabric-ca-server”复制到您机器上的新目录中。 出于这些说明的目的,我们将二进制文件放在名为“fabric-ca-server-int-ca”的自己的文件夹中。
mkdir fabric-ca-server-int-ca
将“fabric-ca-server”二进制文件复制到此文件夹中。
-
使用以下命令将您在上一步中生成的 CA 管理员 TLS 证书和密钥对复制到此 CA 服务器可以访问的位置,例如“fabric-ca-server-int-ca/tls”。 这些是由注册生成的
fabric-ca-client/tls-ca/icaadmin/msp/signcerts/cert.pem
和fabric-ca-client/tls-ca/icaadmin/msp/keystore/
文件 命令。注意: 以下命令假定:
fabric-ca-client/tls-ca/icaadmin/keystore/
下生成的私钥被重命名为key.pem
。fabric-ca-client
和fabric-ca-server-int-ca
文件夹在您的文件结构中处于同一级别。
cd fabric-ca-server-int-ca mkdir tls cp ../fabric-ca-client/tls-ca/icaadmin/msp/signcerts/cert.pem tls && cp ../fabric-ca-client/tls-ca/icaadmin/msp/keystore/key.pem tls
-
由于启用了 TLS 通信,因此中间 CA 需要 TLS CA 根证书才能与父组织 CA 安全地通信。 因此,您需要将初始化 TLS CA 服务器时生成的
fabric-ca-server-tls/ca-cert.pem
复制到tls
文件夹。 请注意,文件名已更改为“tls-ca-cert.pem”,以明确这是来自 TLS CA 的根证书。cp ../fabric-ca-server-tls/ca-cert.pem tls/tls-ca-cert.pem
生成的文件夹结构类似于以下结构。 (为清楚起见,省略了一些文件夹和文件):
fabric-ca-client
└── tls-ca
├── icaadmin
├── msp
├── cacerts
├── keystore
└── key.pem
├── signcerts
└── cert.pem
├── tlscacerts
├── user
├── IssuerPublicKey
└── IssuerRevocationPublicKey
fabric-ca-server-int-ca
└── tls
└── tls-ca-cert.pem
└── cert.pem
└── key.pem
因为您已经部署了父组织(根)CA,您可以使用以下步骤来创建中间 CA:
-
在中间 CA 主目录中,通过运行“init”命令并引导您已向 TLS CA 和父组织 CA 注册的“icaadmin”ID 来初始化 CA。 例如:
./fabric-ca-server init -b icaadmin:icaadminpw
-
修改
fabric-ca-server-config.yaml
文件。port
: 为此服务器指定一个唯一端口。 这些说明使用“7056”,但您可以选择您的端口。tls.enabled
: 必须设置为true
。tls.certfile
andtls.keystore
: 输入 TLS CA 签名证书和私钥的路径和文件名。 这些是您在向 TLS CA 注册“icaadmin”用户时创建的证书和私钥文件。 可以在fabric-ca-client/tls-ca/icaadmin/msp/signcerts/cert.pem
下找到已签名的证书cert.pem
。 私钥位于“fabric-ca-client/tls-ca/icaadmin/msp/keystore”下。 指定的路径名是相对于“FABRIC_CA_CLIENT_HOME”的,因此如果您遵循这些说明中使用的文件夹结构,您可以简单地为“tls.certfile”和“tls/key.pem”指定“tls/cert.pem” 对于tls.keystore
或者您可以指定完全限定的路径名。ca
: 指定 ca 的名称。 例如ica
。signing.profiles.ca.caconstraint.maxpathlen
: 将此值设置为 0,这意味着在此之下没有更多的中间 CA。 默认值为“0”。csr.cn
: 中间 CA 的公用名必须为空。csr.ca.pathlength
: 将此值设置为 0。intermediate.parentserver.url
: 输入父服务器 URL 的值,格式为https://<ROOT-CA-ADMIN>:<ROOT-CA-ADMIN-PW>@<CA-URL>:<PORT>
,例如https ://rcaadmin:rcaadminpw@my-machine.example.com:7055
。intermediate.parentserver.caname
: 从父组织 CA 服务器配置 .yaml 文件中输入父服务器“caname”的值。 在本教程中,我们将该 CA 命名为“org1-ca”。intermediate.enrollment.hosts
: 输入中间 CA 服务器正在侦听的主机名。intermediate.enrollment.profile
: 在“signing.profile”部分输入签名配置文件的名称,以便在颁发证书时使用。 通常这个值是ca
。intermediate.tls.certfiles
: 输入 TLS CA 根tls-ca-cert.pem
文件的路径和文件名。 如果您遵循这些说明中使用的文件夹结构,您可以简单地指定tls/tls-ca-cert.pem
。operations.listenAddress
: 如果另一个 CA 在同一主机上运行,则需要指定一个唯一端口。
-
重要提示: 您必须删除中间 CA
fabric-ca-server-int-ca/ca-cert.pem
和fabric-ca-server-int-ca/msp
文件夹才能使它们成为 使用中间 CA 设置重新生成。 -
启动中间 CA 服务器。 因为中间 CA 引导身份在服务器启动时注册到父组织(根)CA,所以确保在启动中间 CA 之前父组织 CA 正在运行。
./fabric-ca-server start
由于这是一个中间 CA 服务器,请注意生成了一个“ca-chain.pem”文件。 此文件包含证书链,并包括中间 CA
ca-cert.pem
以及根 CAca-cert.pem
。
注册中级 CA 管理员
部署中间 CA 的最后一步是注册中间 CA 管理员以生成节点签名证书和私钥,这是该身份能够注册其他身份所必需的。 您应该已经在 Fabric CA 客户端 部分设置了所需的文件夹。
我们用于这些命令的文件夹结构是
fabric-ca-client
└── int-ca
└── tls-root-cert
Fabric CA 客户端使用这些文件夹来:
- 存储在对 TLS CA 服务器运行 Fabric CA 客户端注册命令时颁发的证书。 (int-ca 文件夹)
- 了解允许 Fabric CA 客户端与 TLS CA 服务器通信的 TLS 证书所在的位置。 (tls-root-cert 文件夹)
-
当您之前使用 Fabric CA 客户端为 TLS CA 和组织 CA 生成证书时,您指定了
FABRIC_CA_CLIENT_HOME
的值。 假设仍然设置,您可以继续下一步。 否则,您应该在 Fabric CA 客户端二进制文件所在的目录中并运行以下命令:export FABRIC_CA_CLIENT_HOME=$PWD
-
现在您可以使用 Fabric CA 客户端生成 CA 管理员证书和私钥。 您需要此证书和私钥才能使用此 CA 颁发身份。 我们在注册命令上使用
--mspdir
标志来指定存储生成的证书的位置。 运行命令:
./fabric-ca-client enroll -d -u https://<ADMIN>:<ADMIN-PWD>@<CA-URL>:<PORT> --tls.certfiles <RELATIVE-PATH-TO-TLS-CERT> --csr.hosts '<CA_HOSTNAME>' --mspdir int-ca/icaadmin/msp
Replace:
<ADMIN>
- 使用在“init”命令中指定的中间 CA 管理员。<ADMIN-PWD>
-使用“init”命令中指定的中间 CA 管理员密码。<CA-URL>
- 使用在中间 CA 配置 .yaml 文件的“csr”部分中指定的主机名。<PORT>
- 使用中间 CA 正在侦听的端口。<RELATIVE-PATH-TO-TLS-CERT>
-包含您从 TLS CA 复制的 tls-ca-cert.pem 文件的路径。 这是相对于“FABRIC_CA_CLIENT_HOME”的路径。<CA_HOSTNAME>
- 带有逗号分隔的主机名列表,证书应该对其有效。 如果未指定,则使用fabric-ca-client-config.yaml
中的默认值。 如果主机名是动态的,您可以为域指定通配符。 例如,当您包含标志--csr.hosts 'host1,*.example.com'
时,这意味着主机名host1
以及来自example.com
域的任何主机都被识别。
例如:
./fabric-ca-client enroll -d -u https://icaadmin:icaadminpw@my-machine.example.com:7056 --tls.certfiles tls-root-cert/tls-ca-cert.pem --csr.hosts 'host1,*.example.com' --mspdir int-ca/icaadmin/msp
当注册命令运行时,它会创建 fabric-ca-client/int-ca/icaadmin/msp
文件夹并包含中间 CA 的签名证书和私钥。 请注意,/intermediatecerts
文件夹也被创建并填充了将中间 CA 连接到根 CA 的中间 CA 证书。
提示: 中间CA部署成功并可以注册和注册身份后,就可以安全地关闭父服务器根CA,组织CA。
下一步
至少,您现在应该为您的组织配置了一个 TLS CA 和一个组织 CA。 您现在可以使用 Fabric CA 客户端向 TLS CA 注册和注册节点管理员身份、节点身份和组织身份,以生成服务器端 TLS 通信所需的 TLS 证书。 同样,您还需要向组织 CA 注册和注册相同的节点管理员和用户,以生成他们的注册证书和 MSP。 请参阅[使用 CA 创建身份和 MSP](https://hyperledger-fabric.readthedocs.io/en/release-2.1/deployment_guide_overview.html#dg-step-four-use-the-ca-to-create- 身份和 msps)了解更多信息。 如果您确实配置了中间 CA,那么您现在可以使用该 CA 来为组织注册和注册身份,而不是使用根 CA。
提示:* 当您随后使用 Fabric CA 客户端向中间 CA 注册身份时,请确保在 register 命令中指定 --mspdir int-ca/icaadmin/msp
。
CA 部署故障排除
Fabric CA 客户端“注册”命令失败
问题: 使用 Fabric CA 客户端 CLI 运行注册命令时,失败并显示:
Error: Failed to read config file at '/Users/mwp/.fabric-ca-client/fabric-ca-client-config.yaml': While parsing config: yaml: line 42: mapping values are not allowed in this context
解决方案:
未设置“FABRIC_CA_CLIENT_HOME”时会发生此错误。 确保您已将 FABRIC_CA_CLIENT_HOME
环境变量设置为指向 Fabric CA 客户端二进制文件的位置。 导航到“fabric-ca-client.exe”二进制文件所在的文件夹并运行命令:
export FABRIC_CA_CLIENT_HOME=$PWD
请注意,当设置了 FABRIC_CA_CLIENT_HOME
并且注册命令失败时,建议在重新尝试注册命令之前删除生成的 FABRIC_CA_CLIENT_HOME/msp
文件夹和生成的 fabric-ca-client.yaml
文件以避免混淆。
中间 CA 服务器无法启动
问题: 中间CA服务器启动失败,报错:
Error: Response from server: Error Code: 0 - Certificate signing failure: {"code":5300,"message":"Policy violation request"}
您可能还会在根 CA 上看到相关的错误:
[ERROR] local signer certificate disallows CA MaxPathLen extending
[INFO] 9.27.117.220:49864 POST /enroll 500 0 "Certificate signing failure: {"code":5300,"message":"Policy violation request"}"
解决方案: 中间CA配置.yaml文件中的signing.profiles.ca.caconstraint.maxpathlen
和csr.ca.pathlength
字段的值需要设置为0。
启动中间 CA 失败
问题: 当您启动中间 CA 时,它会失败并出现错误:
Post https://host1.com:7060/enroll: x509: certificate signed by unknown authority
根组织 CA 出现错误:
TLS handshake error from 192.168.1.134:63094: remote error: tls: bad certificate
解决方案: 在启动中间 CA 服务器时,在使用根 CA 注册中间 CA 管理员用户时会出现此问题。 要解决此问题,请确保在中间 CA fabric-ca-server-config.yaml
文件的 intermediate.tls.certfiles
部分中指定的 TLS 证书指向 TLS CA 根证书。 如果您遵循这些说明,它将是 tls/tls-ca-cert.pem
。
注册中间 CA 管理员用户失败
问题: 当您启动中间 CA 并且过程失败并出现错误时:
Error: Response from server: Error Code: 0 - Chain file does not exist at /fabric-ca-server-int-ca/ca-chain.pem
解决方案:
因为修改了中间CA配置文件的csr
块,所以在启动中间CA服务器之前,需要删除中间CA、ca-cert.pem
文件和/msp
文件夹。
向 CA 注册和注册身份
受众:组织管理员、节点管理员
如果您已阅读我们关于 identity 和 [Membership Service Provider (MSP)](https://hyperledger- fabric.readthedocs.io/en/main/membership/membership.html)你知道在 Hyperledger Fabric 中,证书颁发机构用于生成分配给管理员、节点和用户(客户端应用程序)的身份。 虽然可以使用任何可以生成 x.509 证书的证书颁发机构来创建构成身份的公钥/私钥对,但 Fabric CA 还可以生成 Hyperledger Fabric 所需的本地和组织 MSP 文件夹结构。
在本主题中,我们将展示使用 Fabric CA 生成身份和 MSP 的“快乐路径”。 请注意,您不必使用 Fabric CA 来注册和登记身份。 但是,如果您使用不同的 CA,则需要创建 Fabric 用于构建组织、客户端身份和节点的相关身份和 MSP。 我们将在下面展示这些 MSP 的示例。
注册和注册概述
虽然 CA 管理员可以创建身份并将公钥/私钥对提供给带外用户,但此过程将使 CA 管理员可以访问每个用户的私钥。 这种安排违反了关于私钥安全的基本安全程序,不应以任何理由公开。
因此,CA 管理员注册用户,在此过程中,CA 管理员向身份提供注册 ID 和机密(这些类似于用户名和密码)并为其分配角色和任何必需的属性。 然后,CA 管理员将此注册 ID 和机密提供给身份的最终用户。 然后,用户可以使用此注册 ID 和密钥执行 Fabric CA 客户端 enroll 命令,返回包含 CA 管理员分配的角色和属性的公钥/私钥对。
此过程保留了 CA 的完整性(因为只有 CA 管理员可以注册用户并分配角色和从属关系)和私钥(因为只有身份的用户才能访问它们)。
虽然管理员身份只需要注册和注册一个“组织 CA”,它为管理员和节点生成身份证书,但节点也必须注册和注册一个 TLS CA。 这将创建一个公共/私有 TLS 密钥对,节点用于签署和加密其通信。 如果 TLS CA 仅使用“TLS”配置文件创建,则向组织 CA 注册和注册身份的命令是 与向 TLS CA 注册和注册的那些相同。 如果您使用的 CA 包含两个配置文件,则在与 CA 通信时必须指定 TLS 配置文件。 有关创建只能用作 TLS CA 的 CA 的更多信息,请查看 [CA 部署指南](https://hyperledger-fabric-ca.readthedocs.io/en/latest/deployguide/cadeploy.html#modify -the-tls-ca-server-configuration)。
在你开始之前
在本教程中,我们将假设已配置和设置 CA 服务器 使用 CA 设置说明。 我们还将展示注册身份(由 CA 管理员处理的任务或具有 CA registrar
权限的身份)和“注册”身份(由身份用户处理的任务)时使用的命令和变量 )。
在任何一种情况下,都必须设置“fabric-ca-client”,因为它用于调用注册和注册身份的 CA 服务器。 如果您在生产环境中操作,则应启用 TLS,并且需要提供 TLS 证书以保护您与 CA 的通信。 TLS 证书将需要来自您与“组织”CA 一起启动的 TLS CA,您用于为节点、管理员和客户端生成身份,并且此 TLS CA 与您将用于生成证书的 CA 相同(因为节点 使用 TLS 相互通信)。
确定文件夹和证书的结构
无论您是在测试环境还是生产环境中运行,保持一致且连贯的结构来管理您的文件夹和证书至关重要。 尽管在任何地方都使用相同的模式并不是 Fabric 的严格要求(只要您的路径在您引用它们时是正确的,例如在引导节点时,Fabric 可以使用它们),证书路径错误是最常见的错误之一 由 Fabric 用户提供。 深思熟虑和一致性可以大大减少这些问题。
请注意,生产部署可能包括我们不会在此处显示的结构。 例如,它可能包含 gateways 的文件夹,允许管理员轻松查看哪些组织、节点和客户端与每个网络相关联。 同样,您可能会看到一个 smart contracts 文件夹,其中包含与网络关联的智能合约。
我们在此处描述的组织文件夹和证书的方法不是强制性的,但您会发现它很有帮助,因为它与本主题的其余部分以及 CA 部署指南一致。 最重要的是,它围绕拥有和管理它们的组织组织您的结构。 虽然很自然地认为您的部署是围绕peer节点和排序节点等物理结构进行组织的,但实际上组织才是中心化的形象。 特别是因为并非所有网络参与者都必然拥有一个节点。
此处介绍的结构和方法也代表了最佳实践,防止出现以下情况,例如,Fabric 希望将 MSP 文件夹称为“msp”,如果使用不同的名称,则必须在 相关的 YAML 文件。
用于操作 Fabric CA 客户端的文件夹结构
虽然一致的结构对于您将从 CA 获得的证书很重要(您将在创建节点和充当管理员时使用),但对于那些将使用单个 Fabric CA 客户端连接到多个 CA 作为管理员。 这是因为与组织管理员不同,在组织管理员中,单个身份可以用作您需要的任意数量节点的管理员,每个 CA 必须有一个单独的管理员,该管理员在引导时注册并随后注册。
这就是为什么如果您以管理员身份从同一个 CA 客户端连接到不同的 CA 服务器,当您使用 --mspdir
标志时,您还必须包含 -u
标志以定位正确的 CA 服务器。 这将允许您为要连接的 CA 指定正确的 CA 管理员凭据。
如果您只使用单个 CA 客户端来定位单个 CA 服务器(对于将成为组织或节点管理员的用户更常见),您可以选择在 YAML 文件中指定 CA 服务器 CA 客户端。
如果您遵循 CA 部署指南中描述的过程,您应该有一组与您的 Fabric CA 客户端相关联的文件夹,类似于以下内容:
上图显示了与使用单个 Fabric CA 客户端连接到多个 CA 服务器相关的文件夹结构。
如您所见,每个 CA 服务器在 fabric-ca-client
文件夹下都有一个单独的文件夹。 每个 CA 文件夹内都有一个“msp”文件夹,其中包含该 CA 管理员身份的公钥/私钥对。 这是您在管理 CA 时必须指定的 --mspdir
(例如,在注册身份时)。
如果您不是 CA 管理员,而只是为了向组织 CA 和 TLS CA 注册而拥有 Fabric CA 客户端,则使用单个 Fabric CA 客户端仍然是最佳实践。 此 CA 客户端仍需要 TLS 证书(可以使用 CA 部署指南中描述的过程获得),但您不需要指向 CA 管理员证书,因为您不是 CA 管理员。 相反,注册身份的 CA 管理员提供给您的注册 ID 和密码允许您与特定 CA 服务器交互并接收必要的证书。
您的组织和节点管理员身份的文件夹结构
虽然组织使用 Fabric CA 客户端操作的 CA 文件夹的方式在很大程度上取决于典型 CA 管理员将与之交互的多个 CA,但用于组织组织 MSP 的组织方法将部分取决于 您预计创建和管理多少个组织。
例如,在 Fabric 测试网络 中,同时创建了 peer 组织和 orderer 组织。 结果,与网络相关的脚本创建了一个名为“organizations”的文件夹,其中包含一个“ordererOrganization”和一个“peerOrganization”文件夹。 这些文件夹中的每一个都包含每个组织的文件夹,其中包含该组织的 MSP 和这些组织拥有的每个节点的文件夹。
上图显示了管理员管理的组织结构。
即使您不打算创建order者组织,这种结构也可以为您的部署提供最高级别的长期灵活性。 例如,如果您创建一个新的peer点,您将知道在 organizations/<name of org>/<name of new peer>
处创建一个文件夹。 这个 <name of new peer>
文件夹将是 peer 的本地 MSP(在注册 peer 身份时生成)和通过 TLS CA 注册生成的证书的位置。 同样,peer 所属组织的 MSP 的位置可以参考组织的 msp
文件夹(如果正在使用节点 OU,则该文件夹包括 config.yaml
文件以及管理员的公共证书 组织的,在许多情况下将是peer方的管理员)。
上图显示了组织拥有的peer内的子文件夹。 注意 peers
文件夹下的 msp
文件夹。 这是peer点的本地 MSP,而不是 org1.example.com
MSP 的副本。
最佳做法是在注册身份之前创建这些文件夹,然后在通过 --mspdir
标志发出注册命令时引用它们。 请注意,虽然 –mspdir 标志用于指定 CA 管理员的 MSP 在注册期间的位置,但它在注册期间用于指定文件系统上的位置,其中文件夹和证书返回 CA 将被存储。
节点OU
在之前的 Fabric 版本中,身份只有两种类型:client
和 peer
。 peer
类型用于peer节点和排序节点,而 client
类型用于客户端(应用程序)和管理员,将client
类型放置在特殊的admincerts
文件夹中以形成身份 特定上下文中的管理员。
现在可以并建议将“peer”或“client”以及“orderer”或“admin”角色编码到 CA 使用 NodeOUs 生成的证书中。 这将身份在证书中的角色嵌入。
请注意,一个身份只能具有这些角色之一,并且要启用这些角色,您必须将相关节复制到一个名为 config.yaml
的文件中。 Fabric 以不同的方式使用这个 config.yaml
文件。 在通道 MSP 中,它用于验证组织的 admin
是否具有 admin
角色(这取代了旧版本 Fabric 中使用的 admincerts
文件夹的使用)。 在节点的本地 MSP 中,用于验证节点 admin 的 admin
角色和节点自身的 peer
或 orderer
角色。
请注意,您可以随意命名这个 msp
文件夹——msp
是 Fabric CA 客户端使用的默认文件夹名称。 如果您选择其他名称,例如 org1msp
,则在注册身份时必须使用 --mspdir
标志引用此文件夹。 以编程方式,您可以使用与此类似的命令将“config.yaml”复制到您注册的身份的正确“msp”文件夹中。
echo 'NodeOUs:
Enable: true
ClientOUIdentifier:
Certificate: cacerts/localhost-7054-ca-org1.pem
OrganizationalUnitIdentifier: client
PeerOUIdentifier:
Certificate: cacerts/localhost-7054-ca-org1.pem
OrganizationalUnitIdentifier: peer
AdminOUIdentifier:
Certificate: cacerts/localhost-7054-ca-org1.pem
OrganizationalUnitIdentifier: admin
OrdererOUIdentifier:
Certificate: cacerts/localhost-7054-ca-org1.pem
OrganizationalUnitIdentifier: orderer' > path to msp>/msp/config.yaml
或者您可以手动将 Node OU 材料复制到 msp
文件夹的 config.yaml
文件中:
NodeOUs:
Enable: true
ClientOUIdentifier:
Certificate: cacerts/<root CA cert for this org>.pem
OrganizationalUnitIdentifier: client
PeerOUIdentifier:
Certificate: cacerts/<root CA cert for this org>.pem
OrganizationalUnitIdentifier: peer
AdminOUIdentifier:
Certificate: cacerts/<root CA cert for this org>.pem
OrganizationalUnitIdentifier: admin
OrdererOUIdentifier:
Certificate: cacerts/<root CA cert for this org>.pem
OrganizationalUnitIdentifier: orderer
在生产场景中,假设用户将只创建一个组织。 但是,最好为该组织建立一个单独的文件夹结构,然后在该组织下为您的“msp”(定义组织)和节点(将具有本地 MSP 和 TLS 部分)创建一个结构。
如果你正在创建一个 orderer,你显然不需要将 PeerOUIdentifier
复制到你的 config.yaml
文件中(反之亦然),但为了简单起见,您可能希望使用整个部分 - 额外的节 没有害处,它们允许将相同的 config.yaml
用于与组织关联的多种类型的节点和身份。
注册身份
虽然管理员(或其他用户)将使用的身份和节点使用的身份有不同的目的,但它们基本上都只是身份:公钥/私钥对,其中公钥为他人所知,而私钥为 密钥用于签名,生成一个可以验证来自私钥的输出,即使私钥本身从未公开。
如上所述,身份首先由 CA 管理员向 CA 注册。 该身份随后由该身份的用户注册。 如果您使用的是 Fabric CA 客户端,则此注册命令如下所示(无论您注册的身份类型和 CA 类型如何):
./fabric-ca-client register -d --id.name <ID_NAME> --id.secret <ID_SECRET> -u <CA_URL> --mspdir <CA_ADMIN> --id.type <ID_TYPE> --id.attrs $ID_ATTRIBUTE --tls.certfiles <TLSCERT>
其中变量如下:
ID_NAME
: 身份的注册 ID。 此名称将提供给带外用户,他们将在注册时使用它。ID_SECRET
: 身份的秘密(类似于密码)。 这个秘密也将与注册时使用的注册 ID 一起提供给用户。CA_URL
: CA 的 URL,后跟端口“7054”(除非默认端口已更改)。CA_ADMIN
: CA 管理员的证书位置的路径。ID_TYPE
: 身份的类型(或角色)。 有四种可能的类型:“peer”、“orderer”、“admin”和“client”(用于应用程序)。 此类型必须链接到相关的 NodeOU。 如果没有使用 NodeOU,您可以忽略类型和--id.type
标志。ID_ATTRIBUTE
: 为此身份指定的任何属性。 有关属性的更多信息,请查看 基于属性的访问控制。 这些属性也可以作为 JSON 数组添加,因此$ID_ATTRIBUTE
并不是表示单个属性,而是表示任何和所有属性,应将其放置在 register 命令中的--id.attrs
标志之后。TLSCERT
: TLS CA 根签名证书的相对路径(在创建 TLS CA 时生成)。
请注意,-d
标志启用调试模式,如果注册失败,这对于调试很有用。
以下是管理员身份的示例注册命令:
./fabric-ca-client register -d --id.name org1admin --id.secret org1adminpw -u https://example.com:7054 --mspdir ./org1-ca/msp --id.type admin --tls.certfiles ../tls/tls-ca-cert.pem --csr.hosts 'host1,*.example.com'
成功注册身份后,CA 管理员会将注册 ID (org1admin
) 和注册密码 (org1adminpw
) 提供给将注册为管理员的用户。
如果您要创建节点所需的证书,请确保向与组织关联的 TLS CA 进行注册和注册。
注册身份
设置注册 CA 并注册身份后,CA 管理员将需要联系将带外注册的用户,向他们提供他们在注册身份时使用的注册 ID 和密码。 然后,使用此 ID 和密钥,用户可以使用他们自己的 Fabric CA 客户端副本注册身份,以联系相关 CA(这将是用于创建管理员和节点身份的组织 CA,或 TLS CA, 用于生成节点需要的 TLS 证书)。 请注意,如果已启用 TLS,此用户将需要获取 TLS CA 根签名证书以在注册时包含。
虽然可以在注册管理员之前注册节点身份,但在注册节点(无论是peer节点还是排序节点)之前先注册管理员并建立组织的 MSP 更有意义。 在启动节点之前,您当然需要注册一个管理员身份并将其证书放在节点的本地 MSP 中。
该命令如下所示:
./fabric-ca-client enroll -u https://<ENROLL_ID>:<ENROLL_SECRET><@CA_URL>:<PORT> --mspdir <MSP_FOLDER> --csr.hosts <CSR_HOSTNAME> --tls.certfiles $TLS_CERT
使用这些变量:
ENROLL_ID
: 注册此身份时指定的注册 ID。 这将必须在带外传达给此身份的用户。ENROLL_SECRET
: 注册此身份时指定的注册密码。 这将必须在带外传达给此身份的用户。CA_URL
: CA 的 URL,包括端口(默认为 7054)。 如果您在同一位置配置了两个 CA,您还必须在--caname
标志之后指定 CA 名称,但在本教程中,我们假设您使用的是 [CA 部署教程中指定的 CA 配置 ]。PORT
: 您注册的 CA 使用的端口。MSP_FOLDER
: 文件系统上的 MSP(本地 MSP,如果注册节点,或 org MSP,如果注册管理员)的路径。 如果您未指定-mspdir
标志来指定位置,则证书将放置在您当前位置的名为msp
的文件夹中(如果此文件夹不存在,则会创建它)。CSR_HOSTNAME
:仅与节点身份相关,这将对节点的域名进行编码。 例如,MagnetoCorp 可能会选择主机名“peer0.mgntoorg.magnetocorp.com”。TLS_CERT
: 与此组织关联的 TLS CA 的 TLS CA 根签名证书的相对路径。
这是与我们之前使用的示例注册命令相对应的示例注册命令:
./fabric-ca-client enroll -u https://org1admin:org1adminpw@example.com:7054 --mspdir ./org1.example.com/msp --csr.hosts 'org1,*.example.com' --tls.certfiles ../tls/tls-ca-cert.pem
与注册命令仅返回公钥/私钥对的典型 CA 不同,Fabric CA 返回称为 MSP 的文件夹结构。 然后,此 MSP 可用于创建 Fabric 在创建节点或将组织添加到通道时可以使用的结构。 在注册管理员的情况下,MSP 构成了组织的基础。 在注册节点身份的情况下,它构成了节点本地 MSP 的基础。 请注意,此文件夹结构也将由 TLS CA 返回。 但是,只需要相关的 TLS 证书。
以下是您注册身份后将返回的 MSP 示例:
上图显示了注册返回的子文件夹。
在证书命名中,使用有助于跟踪您是引用公共证书还是私钥的约定很有帮助。 鉴于两者都具有“.pem”扩展名,请考虑以下命名公共证书和私钥的约定:
- 将“cert.pem”(Fabric CA 将赋予公共证书的默认名称)中的公共证书重命名为有意义的名称。 例如,“Org1”管理员的公共证书可以命名为“org1-admin-cert.pem”。
- 将私钥从
94u498f9r9fr98t49t345545345_sk
重命名为有意义的名称,例如org1-admin-key.pem
。
在这个约定中,名称中在附加 .pem
扩展名之前的最后一个单词将是 cert
或 key
以帮助您记住哪个是哪个。
从注册的身份创建 MSP
正如我们所指出的,向 Fabric CA 注册身份会生成输出,其中不仅包括公钥/私钥对,还包括 Fabric 网络需要使用的许多相关文件夹和证书。
但是,这并不意味着这些文件夹可以简单地放入通道配置(将组织加入通道)或节点的本地配置(创建本地 MSP)。 在创建可以添加到频道的组织 MSP 的情况下,您需要删除管理员的私钥。 对于本地 MSP,您需要添加管理员的公共证书。
有关 org MSP(也称为“通道 MSP”,因为它已添加到通道)和节点的本地 MSP 中所需的文件夹和证书的更多信息,请查看 [MSP 结构](https ://hyperledger-fabric.readthedocs.io/en/master/membership/membership.html#msp-structure)。
创建将组织添加到渠道所需的组织 MSP
Fabric 网络中的组织在物理意义上并不像节点那样存在。 相反,它们作为通道配置上的文件夹和证书结构存在。 这些证书标识相关的根 CA、中间 CA(如果使用了)、TLS CA 和至少一个管理员身份。 正如您从上面的成员资格主题以及注册和注册步骤中回忆的那样,这些文件夹和证书是在注册管理员身份时由 Fabric CA 客户端返回的,这就是注册管理员和“创建组织”行为的原因 密切相关。
以下是您想要将组织添加到频道时需要创建的文件夹结构示例(该结构可能会根据您用于将组织添加到频道的方法而略有不同,但无论使用哪种方法,这些都是 您将需要的文件和文件夹):
<location of msp>/msp
├── config.yaml
├── cacerts
│ └── cacert.crt
├── intermediatecerts
| └── cacert.crt
├── tlscacerts
│ └── tlsca.<org-domain>.pem
└── tlsintermediatecerts
└── tlsca.<org-domain>.pem
文件夹和证书在哪里:
cacerts
: 注册和注册管理员身份的组织 CA 的根证书 (ca-cert.pem
)。intermediatecerts
: 中间 CA 的根证书(如果使用的话)。tlscacerts
:已向与该组织关联的节点颁发证书的 TLS CA 的根证书 (ca-cert.pem
)。tlsintermediatecerts
: 中间 TLS CA 的根证书(如果使用的话)。
请注意,虽然证书本身可以命名为您想要的任何名称,但您不应更改文件夹本身的名称,因为 Fabric 期望使用具有特定名称的文件夹。
有关如何为此组织生成 config.yaml
文件的说明,请参阅 NodeOUs。 在旧版本的 Fabric 中,“config.yaml”文件不会出现在此处,并且需要一个额外的文件夹“admincerts”,其中将放置标识该组织管理员的证书。 多亏了节点 OU,这不再是必需的。 ** config.yaml
中列出的 CA 给定节点 OU admin
的任何身份都可以管理组织**。
创建节点的本地 MSP
虽然组织的 MSP 充当组织在通道配置上的表示,但节点的本地 MSP 是参数的逻辑集合,与其他参数一起用作节点创建的一部分。
如上所述,必须使用注册证书(标识节点的公钥/私钥对)和加密节点之间的通信层的 TLS 证书来引导节点。 这种“引导”通过在创建节点时引用的相关 YAML 配置文件中列出这些证书的位置来发生。 这意味着必须先创建节点的本地 MSP,然后才能创建节点本身。 请注意,节点的注册证书是通过列出包含它们的 MSP 的位置来指定的,而 TLS 证书是通过每个证书位置的绝对路径来标识的。
作为参考,这里是一个示例 peer配置文件。
这是一个示例 order节点配置文件。
请注意,这些配置文件要求提供相关本地 MSP 文件夹的位置。 对于peer点,这是通过 mspConfigPath
定义的。 对于 orderer,它是 LocalMSPDir
。 在此位置找到的文件夹将用于定义节点的本地 MSP,包括节点在对其操作进行签名时将使用的私钥以及至少一个节点管理员的公钥。
另一方面,TLS 证书是单独定义的,而不是指向文件夹,并且可以在 YAML 的“TLS 设置”部分中找到。 这意味着 TLS 证书不需要像本地 MSP 那样保存在严格的文件夹结构中(特别是与将使用外部 CA 生成 TLS 证书的用户相关 - 使用示例 YAML 文件作为这些证书的指南 用于)。 当您向 TLS CA 注册节点时,生成的 TLS 公钥可以在 /signcerts
文件夹中找到,TLS 私钥可以在 /keystore
文件夹中找到。 当您启动启用了 TLS 的节点时,您需要从 YAML 配置文件的相关字段中指向这些文件。
与节点的 YAML 文件中的所有配置参数一样,您可以选择在 YAML 本身中或通过使用环境变量来指定“msp”文件夹和 TLS 证书位置。
如果您使用容器化解决方案来运行您的网络(出于显而易见的原因,这是一种流行的选择),最好将这些文件夹(卷)挂载到节点本身运行的容器外部。 如果节点容器出现故障、损坏或重新启动,这将允许证书用于创建新节点。
要查看示例本地 MSP,请查看 MSP 结构。 请注意,仅通过注册peer身份,您不会收到所有这些证书。 例如,您需要创建“用户”子文件夹,并在引导之前将管理节点的身份的公共证书放入文件夹中。 您还需要一个操作证书(取决于您的网络配置,这可能来自单独的操作 CA)。 有关运维服务的更多信息,请查看 运维服务。
下面是一个示例本地 MSP,它可能会在节点已注册并添加其他字段时显示:
localmsp
└── config.yaml
└── cacerts
└── <root CA public cert>.pem
└── intermediatecerts
└── <intermediate CA public cert>.pem
└── keystore
└── <node private cert>.pem
└── signcerts
└── <node public cert>.pem
└── tlscacerts
└── tlsca.<org-domain>.pem
└── tlsintermediatecerts
└── tlsca.<org-domain>.pem
└── operationscerts
└── operationcert.pem
文件夹和证书在哪里:
cacerts
: 注册和注册管理员身份的组织 CA 的根证书。intermediatecerts
: 中间 CA 的根证书(如果使用的话)。keystore
: 节点的私钥。 这是节点用来签署其通信的密钥。signcerts
: 节点的公钥。 该证书提供给进行传入通信的节点,允许发起通信的节点知道它正在与正确的节点通信。tlscacerts
: 已向与该组织关联的 CA 或节点颁发证书的 TLS CA 的根证书。tlsintermediatecerts
: 中间 TLS CA 的根证书(如果使用了)。operationscerts
: 与操作服务交互所需的证书。
请注意,虽然证书本身可以命名为您想要的任何名称,但您不应更改文件夹本身的名称,因为 Fabric 期望使用具有特定名称的文件夹。
正如节点 OU 不再需要在组织 MSP 中包含管理员证书一样,也无需包含节点管理员的公共证书来管理节点。 ** config.yaml
中列出的 CA 给定节点 OU 为 admin
的任何身份都可以管理该组织拥有的任何节点,而无需将该管理员的公共证书放置在组织 MSP 或本地 MSP 中 **。
评论区