Fabric CA官方文档翻译——CA Deployment steps

翻译https://hyperledger-fabric-ca.readthedocs.io/en/latest/deployguide/cadeploy.html

下载可执行文件

Fabric CA server和CA client 执行文件可以从 github. 下载最新版。.zip文件包含了CA server和client。在你通过使用执行文件掌握了CA的部署和运行后,你可能很希望使用Fabric CA的docker镜像,例如在Kubernetes或Docker部署中。不过本文介绍如何正确使用二进制。

server可执行文件

本文我们使用server可执行文件部署三个不同的CA:TLS CA,一个组织CA,一个可选的中间CA。TLS CA确保节点通信通信的安全性。组织CA签发身份证书。如果你决定包含一个中间CA,组织CA server会作为根CA或父CA。如果你还没有准备好,可以回顾 Planning for a CA 来理解各种类型的CA差异。我们在不同的文件夹中运行TLS CA,组织CA,和中间CA。我们需要复制可执行文件到每个文件夹中。

client可执行文件

同样,我们复制可执行文件到文件夹中。将CA客户机放在自己的文件夹中有助于证书管理,尤其是当你需要与多个CA交互时。当您从CA客户端针对CA服务器发出命令时,你可以通过修改请求上的CA服务器URL来针对特定CA。因此,单一的Fabric CA client可执行文件可以在不同的业务中使用。下面有使用的更多信息。

Fabric CA client

在部署Fabric CA 服务之前,你需要了解Fabric CA客户端的角色。而你可以使用Fabric SDK来和CA交互,推荐使用client来注册和获取管理员身份标识。本文假定使用单个Fabric CA client。注册身份或用户是讲注册id和机密添加到CA数据库“用户注册表”的过程。如果你使用LDAP服务来注册用户,则不需要注册步骤,因为这些标识已经存在于LDAP数据库中。注册用户后,你可以使用Fabric CA client “注册”标识,这是生成标识作为组织的一部分需要处理的证书的过程。当你提交请求时,私钥和公钥首先由Fabric CA client在本地生成,然后公钥被发送到CA,后者返回一个编码的“签名证书”。

因为你将使用单个CA client向多个CA提交注册和注册请求,所以在使用CA客户端时,证书管理非常重要。因此,最佳时间是为CA客户机将与之交互的每个服务器创建子文件夹,以存储生成的证书。

  • 创建子文件夹以链接到每个CA服务器,例如/tls-ca或./org1-ca或init-ca。此文件夹可以位于结构CA客户端下,也可以位于CA客户端可以访问路径的任何位置。处于这些说明的目的,这些文件夹位于fabric-ca-client目录。例如:
    mkdir fabric-ca-client
    cd fabric-ca-client
    mkdir tls-ca org1-ca int-ca

    提示:虽然可以从任何文件夹中运行client文件,但为了便于遵循本文说明,我们将在fabric-ca-client中引用它。将Fabric CA client文件复制到此文件中。

  • 因为TLS通信是在生产网络上启用的,所以组织的TLS CA负责生成用于保护组织中所有节点之间通信的证书。因此,每次Fabric CA客户机与该组织中的CA服务器进行事务处理时,它都需要提供TLS CA“根证书”以确保客户机-服务器通信的安全。例如,当Fabric CA客户机向CA服务器发出register或enroll请求时,客户机请求包含根证书以执行SSL握手。TLS CA根证书,名为ca-cert.pem,在服务器config.yaml文件中启用TLS后在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客户端会和不同的组织CA通信,这些组织CA由不同的TLS server保护,接着你需要创建不同的tls-root-cert文件来保护每个组织的tls CA根证书,或者在文件夹中用不同的名称来区分它们。由于我们的Fabric CA客户端将只与同一组织的CA server进行事务处理,所有这些服务器都有同一TLS CA保护,因此我们在该文件夹中只有一个根证书。

你可以使用环境变量在CLI命令来指定本地证书和Fabric CA client可执行文件:

  • FABRIC_CA_CLIENT_HOME -指定client执行文件的完全路径。
  • FABRIC_CA_CLIENT_TLS_CERTFILES -指定TLS CA根证书路径。如果环境变量FABRIC_CA_CLIENT_TLS_CERTFILES 不是一个绝对路径,那么会以FABRIC_CA_CLIENT_HOME的路径为相对路径解析。本文使用-tls.certfiles来指定TLS CA的根路径。
  • FABRIC_CA_CLIENT_MSPDIR 而你可以使用此环境变量来指定证书所在文件夹的名称,因为client和多个CA通信,一个更好的选项是明确的传递--mspdir参数在注册和获取证书的时候指定目录。如果没有指定命令,目录默认是$FABRIC_CA_CLIENT_HOME/msp,如果Fabric CA client与组织中多个CA服务器进行事务处理,则会出现问题。

注意:第一次运行client的enroll命令,如果fabric-ca-client-config.yaml在目录$FABRIC_CA_CLIENT_HOME中不存在,它会生成。当您自定义此文件中的值时,CA客户端将自动使用这些值,并且不必在随后的enroll命令行上传递这些值。

在这些说明中使用单个Fabric CA client与多个CA服务器交互,但不一定是必须的模式。另一种选择是为每个CA服务器提供一个Fabric CA客户端。在这种情况下,将生成到服务器的Fabric CA client链接设置并将其存储在fabric-ca-client-config.yaml,为CA服务器管理员发出初始化命令时的文件。

从CLI提交交易

CA server和CA client包含两组CLI命令:

使用Fabric CA server CLI commands来部署和修改CA server

使用 Fabric CA client CLI commands来提交请求到CA server,如注册,获取或吊销身份。

本文会使用这些命令。

部署CA顺序

假设你没有部署同时包含TLS CA和组织CA的双头CA,则按以下顺序部署CA:

1.部署TLS CA

由于生产网络中需要TLS通信,因此必须在每个CA、peer和order节点上启动TLS。虽然《CA操作指南》中示例配置所有组织中共享一个TLS CA,但推荐的生产配置是为每个组织部署一个TLS CA。TLS CA签发节点加密通信所需的tls证书。因此,它需要第一个部署,tls证书为节点间的tls握手提供证书。

2.部署组织CA

这是组织的身份注册CA,用于注册和获取参与网络的组织身份。

3.部署中间CA(可选)

如果网络中决定需要使用中间CA,那中间键CA的父级server需要首先创建。

部署TLS CA

无论你是设置TLS CA,组织CA还是中间CA,流程都遵循相同的总体步骤。不同的地方只需要修改CA server的configuration .yaml文件。下面是主要步骤:

  • 第一步:初始化CA server
  • 第二步:修改CA server的配置文件
  • 第三部:删除CA server证书
  • 第四部:开启CA server
  • 第五部:使用TLS CA注册起始用户

当你部署任意节点,你有三个选项可以为TLS配置:

  • 没有TLS不建议用于生产网络
  • server端的TLS
  • 相互的TLS

此过程会配置server端的TLS启动(生产环境推荐的模式)。Mutual  TLS默认是关掉的,如果需要使用Mutual TLS,查阅TLS configuration settings

开始之前

将fabric-ca-server可执行文件复制到一个空的文件夹中,在本文中,我们放入fabric-ca-server-tls

mkdir fabric-ca-server-tls

复制fabric-ca-server到文件夹中

初始化TLS CA server

部署的第一步是初始化,运行下面的CLI命令,为CA server指定管理员账号密码

./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管理员用户,因此引导用户不需要使用register命令。所有CA用户需要注册并获取CA,除了CA的管理员身份,含蓄的通过-b来指定。注册过程将用户插入CA数据库。配置LDAP时,初始化不需要-b选项。

注意:这个例子只是示例的目的。显然,在生产环境中你不能使用tls-admin和tls-adminpw作为起始的账号密码。记录下你的管理员账号和密码。之后签发和获取命令时需要。使用有意义的id来区分使用的服务器,并遵循安全密码实践。

CA init命令的作用是什么?

init命令并没有实际开启server但那时生成必须的元素,如果server端没有存在。

  • 设置CA家目录(本文中FABRIC_CA_HOME)到fabric-ca-server init运行的目录中。
  • 生成默认的配置文件fabric-ca-server-config.yaml,作为server‘设置的模板。本文档我们叫这个文件为configuration .yaml
  • 创建TLS CA根签名证书ca-cert.pem,如果home文件夹中没有这个文件。这是个自签名的根证书,意味着它是自己产生的且由TLS CA自己签发而不是从其它资源来的。这个证书是公钥,必须分享给所有要在组织中通信的节点。当有客户端或节点提交交易事务时,它必须包含证书作为交易的一部分。
  • 生成CA server的私钥并储存在FABRIC_CA_HOME 下的/msp/keystore。
  • 初始化默认的SQLite数据库,你可以修改该配置文件中的数据库部分选择期望的数据库。当server启动时,都会从数据库中获取数据。如果以后切换到另一个数据库,则配置文件中存在的身份标识,会被注册。
  • 启动CA server管理,通过-b指定管理员账号和密码到server。当CA服务器随后启动时,管理员用户将使用configuration .yaml中注册部分的属性进行注册。如果此CA将用于注册具有这些属性的其它用户,则CA管理员用户需要拥有这些属性。换句话说,注册官必须有hf.Registrar.Roles属性在注册其它账号之前。因此,如果CA 管理员为中间键来注册admin身份,那么CA管理员必须将hf.IntermediateCA设置为true,即使此CA并不一定用于中间CA。默认设置已经包含这些属性。

注意:当你修改了配置文件并重启了server时,之前签发的证书不会替代。如果想证书在server启动时重新生成,你需要删除它们然后运行fabric-ca-server start。例如,如果在开启server之后,你修改了csr值,你需要删除之前生成的证书,并且运行fabric-ca-server start命令。不过,需要注意,当你一旦使用新的签名证书和私钥来重启server后,之前签发的证书就不能再被CA验证了。

修改TLS CA server配置

现在你已经初始化了server,你可以修改fabric-ca-server-config.yaml来改变用例的默认配置,参照 Checklist for a production CA server

你至少应该执行以下操作:

  • port  输入server的端口。本文使用7054.
  • tls.enabled 回想一下,TLS模式是禁用的在配置文件中。因为这是生产环境,需要启用,将值设为true。设置后启动server会生成TLS签名证书tls-cert.pem。tls-cert.pem是server与client进行握手时使用,client验证使用TLS CA的ca-cert.pem
  • ca.name   CA的名称
  • csr.hosts   更新此参数用来指定server运行的主机和ip地址。
  • signing.profiles.ca  由于这是一个不会颁发CA证书的TLS CA,因此可以删除CA profiles部分。这个signing.profiles块应仅包含tls配置文件。
  • operations.listenAddress 个别情况下,此主机和端口上运行另一个节点,则需要更新此参数以使用其他端口。

删除TLS CA server证书

在开启server之前,如果你修改了配置文件中csr板块中的任意值,你需要删除fabric-ca-server-tls/ca-cert.pem文件还有整个的fabric-ca-server-tls/msp文件夹。下一次启动CA server时会重新生成。

启动TLS CA server

运行如下命令启动CA server

./fabric-ca-server start

因为启用了TLS通信,注意TLS签名证书tls-cert.pem在FABRIC_CA_HOME 下已经生成。

提示:CA在init时的账号和密码不能被start命令的-b参数重置。当需要修改CA的密码时,使用client的identity命令

可选flag:

  • -d DEBUG模式,便于调试。在启动时可以添加-d。但是一般情况下,不推荐server在debug模式下运行,因为这样为导致性能变差。
  • -p 如果你想server运行在与配置文件中不同的端口时,可以重新配置此端口。

使用TLS CA获取起始user

现在TLS CA配置好了,可以部署其它节点,你需要获取TLS CA的其实user。自从CA server启动并且运行,不再使用server CLI命令,而是使用CA client CLI命令来提交请求到server。

履行使用Fabric CA client,获取进程用来生成证书和私钥(组成节点身份)。你已经配置了所需的文件夹在 Fabric CA client部分。

这些Fabric CA client的文件夹结构是:

fabric-ca-client
  └── tls-ca
  └── tls-root-cert

client使用的文件夹目的如下:

  • 保存签发的证书当Fabric CA client获取命令运行时,获取根身份(tls-ca 文件夹)
  • 存储TLS CA根证书,允许client和server通信(tls-root-cert文件夹)

1.复制TLS CA根目录fabric-ca-server-tls/ca-cert.pem(server启动时生成的),到fabric-ca-client/tls-root-cert/tls-ca-cert.pem文件夹。注意文件名已改为tls-ca-cert.pem来保证清晰的表明为TLS CA根证书。重点:TLS CA根证书需要在每个客户端系统中,运行命令时需要。

2.Fabric CA Client也需要制定client的可执行文件路径。FABRIC_CA_CLIENT_HOME 用来指定。

export FABRIC_CA_CLIENT_HOME=<FULLY-QUALIFIED-PATH-TO-FABRIC-CA-BINARY>

例如,如果在当前目录,可以写:

export FABRIC_CA_CLIENT_HOME=$PWD

3.你已经用client 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 --csr.hosts '<CA_HOSTNAME>' --mspdir tls-ca/tlsadmin/msp

替换:

  • <ADMIN> 使用TLS CA 管理员,init时指定
  • <ADMIN-PWD> 管理员密码,init时指定
  • <CA-URL> 配置文件的csr部分指定的主机
  • <PORT> TLS CA监听的端口
  • <RELATIVE-PATH-TO-TLS-CERT> 根证书路径和名称。此路径是对于FABRIC_CA_CLIENT_HOME的相对路径。如果遵循了本教程就是tls-root-cert/tls-ca-cert.pem
  • <CA_HOSTNAME> 逗号分隔的域名(TLS可以用验证),如果没有指定则使用fabric-ca-client-config.yaml中默认值。你可以为域名指定通配符。例如,当值是--csr.hosts 'host1,*.example.com',意味着主机host1和example.com的任何域名都会被识别。这个值会插入到证书属性中(SAN)。这个值与csr.hosts指定的参数一致。

例如:

./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 --csr.hosts 'host1,*.example.com' --mspdir tls-ca/tlsadmin/msp

在本例中,-d参数以调试模式运行,这对于注册失败的情况很有用。

注意--mspdir标志用于指定存储由enroll命令生成的TLS CA管理证书的位置。

--enrollment.profile tls指定因为我们获取TLS CA。使用此标志意味着注册时根据configuration .yaml文件的签名部分中定义的TLS配置文件的用法和过期设置执行的。注意:如果配置文件中你删除了signing.profiles.ca部分,你可以忽略-enrollment.profile tls 标识。

当这个命令执行成功,fabric-ca-client/tls-ca/tlsadmin/msp文件生成和包含了签名证书和私钥从TLS CA管理员身份中。如果获取命令因为某些原因失败,以免以后混淆,你需要删除生成的私钥fabric-ca-client/tls-ca/admin/msp/keystore,在重新执行获取命令之前。我们需要使用-u来指定正确的CA server。结合使用--mspdir标志指示要在register命令上使用的加密材料的位置,或者在enroll命令上存储生成的证书的位置。

提示:一旦你使用client执行了enroll ,检查生成的fabric-ca-client/fabric-ca-client-config.yaml。因为我们使用一个client和多个server交互,我们需要使用-u标识来指定正确的CA server。结合--mspdir来指定使用的加密素材。

下图是使用Fabric CA client创建TLS CA服务器和注册引导身份所执行的步骤的概念性摘要:

注册和获取组织CA的起始身份使用TLS CA

TLS CA server以起始管理员身份开始(此管理员拥有所有的权限)。管理员的一个关键能力是注册新身份的能力。组织中处理事务的节点都需要在TLS CA上注册。因此,在设置组织CA之前,我们需要使用TLS CA注册并使用组织CA引导身份,以获取其TLS证书和私钥。以下命令向TLS CA注册组织CA起始账号rcaadminrcaadminpw 。

./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证书。在这种情况下,我们在enroll命令上使用--mspdir标志来指定为rcaadmin用户存储生成的组织CA TLS证书的位置。因为这些证书是不同的身份,最好将他们放入各自的文件夹中。因此,替换到默认的msp文件夹,我们把他们放入新的文件夹名为rcaadmin(在tlsadmin 旁边)。

./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工作方式不同。对于enroll 命令,--mspdir标志标明哪里存储rcaadmin 的身份文件。

重要:组织CA TLS签名证书在fabric-ca-client/tls-ca/rcaadmin/msp/signcert下面,且私钥在fabric-ca-client/tls-ca/rcaadmin/msp/keystore。当你部署组织CA,你需要在configuration .yaml中指出这两个文件的路径。为了便于参考,你可以重命名keystore文件夹中的key.pem。

(可选)注册和获取中间CA管理员的TLS CA

相似的,如果你计划有中间CA可以用来签发组织证书,现在还应该注册并获取中间CA的管理员用户。下面的命令注册中间CA的账号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的时机。对于enroll命令,我们使用--mspdir来指定icaadmin 用户存储生成中间CA TLS证书的位置。在本例中,我们将他们放入tlsadmin文件夹旁边的icaadmin/msp文件夹中。

./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/keystore。当你部署中间CA时,你需要在中间CA的configuration .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”或“enrollment CA”用于为组织颁发标识。你部署TLS CA在之前的步骤中,现在我们准备部署组织CA。在本章后面的内容,可以选择是否部署中间CA;因此,这个CA server作为“根CA”在整个信任链中。

因为你已经在上面向TLS CA注册并获取了组织CA引导标识rcaadmin,因此你可以按照部署TLS CA时使用的相同步骤模式部署CA。

开始之前

  • 复制Fabric CA server可执行文件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 server

运行命令以初始化服务器,为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 server配置

就像我们队TLS CA所做的那样,我们需要生成fabric-ca-server-config.yaml文件为组织CA来修改默认配置,参考Checklist for a production CA server

至少,你需要编辑以下字段:

  • port 输入你想要的server端口。本文使用7055,但你可以选择你的端口。
  • tls.enabled起用TLS通过设置这个值为true。
  • tls.certfile和tls.keystore,输入TLS CA签名证书和私钥的相对路径和文件名,该证书和私钥是在该CA的引导管理向TLS CA注册时生成的。签名证书,cert.pem,生成使用Fabric CA client和可以发现在fabric-ca-client/tls-ca/rcaadmin/msp/signcerts/cert.pem。私钥在fabric-ca-client/tls-ca/rcaadmin/msp/keystore下。指定的路径名是相对于FABRIC_CA_CLIENT_HOME的,因此如果你遵循这些说明中使用的文件夹结构,则只需指定 tls/cert.pem和 tls.certfile和tls/key.pem对于tls.keystore也可以指定完全限定的路径名。
  • ca.name 通过在该参数中指定一个值,为组织CA命名,例如org1-ca。
  • csr.hosts 如果此服务器运行的主机名与ip地址与文件中已有的不同,请更新此参数以包括此主机名和ip地址。
  • operations.listenAddress 如果有一个CA运行在host上,这样你需要升级参数来使用不同的端口。
  • csr.ca.pathlength  此字段用于限制CA证书层次饥饿哦股。将根CA的值设置为1意味着根CA可以颁发中间CA证书,但这些中间CA不能反过来颁发其它CA证书。换句话说,中间CA不能注册其它中间CA,但它可以为用户颁发注册证书。默认值为1.
  • signing.profiles.ca.caconstraint.maxpathlen 此字段标识证书链中可以跟随此证书的非自行颁发的中间证书的最大数量。如果这是中间CA的父server,则此根cA需要在configuration .yaml文件中将此值设置为大于0.看文档的 signing 部分。默认值是0.
  • operations.listenAddress 在不太可能的情况下,此主机和端口上运行另一个节点,则需要更新此参数以使用其他端口。

删除CA server证书

在开启server之前,如果你修改了csr区域的值,你需要删除fabric-ca-server-org1/ca-cert.pem和整个fabric-ca-server-org1/msp文件。在下次启动CA服务器时,将根据configuration .yaml文件中的新设置重新生成这些证书。

开启CA server

运行如下命令启动CA server

./fabric-ca-server start

获取CA admin

部署CA的最后一步是注册CA管理引导标识,该标识生成节点签名的证书和私钥。这个键值对需要是管理员的身份来获取其它身份。同样我们使用client CLI来注册管理员。你需要安装 Fabric CA client部分。

文件结构使用如下命令

fabric-ca-client
  └── org1-ca
  └── tls-root-cert
  • 这些文件也是client使用的:存储对于TLS CA服务器运行Fabric CA client enroll命令时颁发的证书。(org1-ca文件夹)
  • 知道允许Fabric CA client与TLS cA服务器通信的TLS 证书所在的位置。(tls-root-cert 文件夹)

1.以前使用Fabric CA client为TLS CA生成证书时,指定了FABRIC_CA_CLIENT_HOME。假设该设置仍然可以设置,则可以继续下一步。否则,您应该位于Fabric CA client二进制文件所在目录中并运行以下命令:

export FABRIC_CA_CLIENT_HOME=$PWD

2.现在你可以使用Fabric CA client来生成CA admin证书和私钥。你需要这个证书和私钥可以签发CA使用的身份证书。我们使用--mspdir标签在enroll命令中,来指明在哪里存储证书。运行如下命令:

./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 org1-ca/rcaadmin/msp

替代:

  • <ADMIN> 组织CA管理员,在init命令中指定的。
  • <ADMIN-PWD> 组织CA密码,值init命令中指定的。
  • <CA-URL> 主机,在配置文件的csr部分指定。
  • <PORT> 组织CA的监听端口。
  • <RELATIVE-PATH-TO-TLS-CERT>  tls-ca-cert.pem文件路径。是FABRIC_CA_CLIENT_HOME的相对路径。
  • <CA_HOSTNAME> 逗号分隔的有效的主机名。如果没有指定,则使用配置文件的默认值。如果主机是动态的,可以为域指定通配符。例如,当包含标志--csr.hosts 'host1,*.example.com'这意味着主机名hosts1和来自example.com的网站域。

在这种情况下,-d参数运行client在DEBUG模式,对于调试错误很有帮助。例如:

./fabric-ca-client enroll -d -u https://rcaadmin:rcaadminpw@my-machine.example.com:7055 --tls.certfiles tls-root-cert/tls-ca-cert.pem --csr.hosts 'host1,*.example.com' --mspdir org1-ca/rcaadmin/msp

当命令运行,enroll命令创建fabric-ca-client/org1-ca/rcaadmin/msp文件包含身份证书和私钥。

└── msp
    ├── cacerts
        └── my-machine-example-com-7055.pem
    ├── keystore
        └── 60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk
    ├── signcerts
        └── cert.pem
    ├── user
    ├── IssuerPublicKey
    └── IssuerRevocationPublicKey  

介绍:

  • my-machine-example-com-7055.pem是组织CA的根证书。
  • 60b6a16b8b5ba3fc3113c522cce86a724d7eb92d6c3961cfd9afbd27bf11c37f_sk 是私钥。私钥不能分享给任何其它人。这需要注册和获取其它身份。可以随意改名以便操作,例如org1-key.pem。
  • cert.pem是CA管理员签发的身份证书。

3.(可选)注册中间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 admin的加密素材。我们不向组织CA注册icaadmin 标识,而是稍后根据中间CA注册此中间CA管理员标识。

(可选)部署中间CA

中间CA与组织根CA形成一个信任链,可用于将特定组织的注册请求定向到单个CA,以及通过关闭根CA来保护信任根。因此,当中间CA用于处理登陆请求时,根CA可以关闭。

注意:这部分假设你已经 registered and enrolled 那个icaadmin 身份标识(本节前面的步骤3)

开始之前

  • 将结构CA服务器二进制结构复制器复制到计算机的新目录。处于这些说明的目的,我们将二进制文件放在命名为fabric-ca-server-int-ca。
    mkdir fabric-ca-server-int-ca
    

    复制fabric-ca-server到文件夹中。

  • 使用以下命令将在上一步中生成的CA admin 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/会产生在enroll命令时。

       注意:下面的命令假设:

        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安全通信。因此,你需要复制fabric-ca-server-tls/ca-cert.pem(TLS CA初始化时生成的)到tls文件夹。注意改名为tls-ca-cert.pem清晰的表明是根证书。
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。

1.在中间CA主目录中,通过运行init命令并引导已向TLS CA和父组织CA注册的icaadmin,例如:

./fabric-ca-server init -b icaadmin:icaadminpw

2.修改fabric-ca-server-config.yaml文件。

  • port:为server指定一个单独的端口。本文使用7056,但你可以选择你的端口。
  • tls.enabled: 必须设置为true。
  • tls.certfile和tls.keystore:输入TLS CA签名证书和私钥的路径和文件名。这些是在向TLS CA注册icaadmin用户时创建的证书和私钥文件。签名证书cert.pem路径是fabric-ca-client/tls-ca/icaadmin/msp/signcerts/cert.pem。私钥路径是fabric-ca-client/tls-ca/icaadmin/msp/keystore。指定的路径名是相对于FABRIC_CA_CLIENT_HOME的,因此如果您遵循这些说明中使用的文件夹结构,则只需指定 tls/cert.pem对于 tls.certfile文件和tls/key.pem。
  • ca:指定一个ca的名字,例如ica
  • signing.profiles.ca.caconstraint.maxpathlen:设置值到0,意味着更多中间CA。默认值时0.
  • csr.cn:中间CA的共用名必须为空。
  • csr.ca.pathlength:设置值到0
  • intermediate.parentserver.url:输入server的URL,格式https://<ROOT-CA-ADMIN>:<ROOT-CA-ADMIN-PW>@<CA-URL>:<PORT>,例如https://rcaadmin:rcaadminpw@my-machine.example.com:7055
  • intermediate.parentserver.caname: 从父组织CA server configuration .yaml文件中输入父服务器caname的值。在本教程中,我们将其命名为org1-ca。
  • intermediate.enrollment.hosts:输入中间CA服务器正在侦听的主机名。
  • intermediate.enrollment.profile:从中输入签名配置文件的名称signing.profile部分,用于颁发证书。通常这个值是ca。
  • intermediate.tls.certfiles:输入TLS CA根TLS CA的路径和tls-ca-cert.pem文件。如果你遵循这些说明中使用的文件夹结构,你可以简单地指定 tls/tls-ca-cert.pem。
  • operations.listenAddress:如果另一个CA运行在相同的主机上,你需要指定一个单独的端口。

3.重要:必须删除中间CA  fabric-ca-server-int-ca/ca-cert.pem和fabric-ca-server-int-ca/msp文件夹,以便使用中间ca设置重新生成它们。

4.启动中间CA。因为中间CA的启动身份是由父组织CA签发,确保父组织的CA提前运行。

./fabric-ca-server start

由于这是一个中间CA server,请注意ca-chain.pem文件已经生成。此文件包含证书链,并包含中间CA ca-cert.pem以及根CA ca-cert.pem。

获取中间CA admin

部署中间CA的最后一步是注册中间CA管理员以生成节点签名证书和私钥,这是注册身份所必须的。你应该已经在Fabric CA client部分设置了所需的文件夹。

文件结构使用如下命令

fabric-ca-client
  └── int-ca
  └── tls-root-cert

这些文件使用Fabric CA client:

  • 存储对TLS CA服务器运行Fabric CA client enroll命令时颁发的证书。 (int-ca文件夹)
  • 知道允许Fabric CA client与TLS CA server通信的TLS证书所在的位置。(tls根证书文件夹)

1.以前使用Fabric CA client为TLS CA和组织CA生成证书时,指定了FABRIC_CA_CLIENT_HOME的值,假设该设置仍然设置,则可以继续下一步。否则,你应该在Fabric CA client二进制文件所在的目录中运行命令。

export FABRIC_CA_CLIENT_HOME=$PWD

2.现在你可以使用Fabric CA client来生成CA管理证书和私钥。你需要此证书和私钥才能使用此CA颁发标识。我们使用enroll命令上的--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

替换:

  • <ADMIN> 使用中间CA管理员(init命令时指定)。
  • <ADMIN-PWD> 使用init命令指定的中间CA密码。
  • <CA-URL> 使用在中间CA configuration .yaml文件的csr部分中指定的主机名。
  • <PORT> 中间CA监听端口。
  • <RELATIVE-PATH-TO-TLS-CERT> 指向到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

当enroll命令运行时,它将创建 fabric-ca-client/int-ca/icaadmin/msp文件夹,并包含中间ca的签名证书和私钥。请注意,/intermediatecerts文件夹也已经创建并填充了将此中间ca连接到根ca的中间证书。

注意:一旦中间CA成功运行,你可以注册和获取身份,然后可以安全的关掉父server的根CA,和组织CA。

下一步

最低限度的,现在应该为你的组织配置TLS CA和组织CA。你可以使用Fabric CA client来注册和获取节点管理员身份,节点身份,和组织身份使用TLS CA来产生TLS证书需要server端TLS通信。同样,您还需要向组织CA注册和注册相同的节点管理员和用户,以生成他们的注册证书和msp。查看 Use the CA to create identities and MSPs更多信息。如果你配置了中间CA,你可以使用那个CA来注册和获取身份。

注意:当你随后使用Fabric CA client向中间CA注册标识时,请确保在register命令上指定 --mspdir int-ca/icaadmin/msp。

CA部署疑难解答

Fabric CA client enroll执行失败

问题:当运行enroll命令使用Fabric CA client 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 指向到client执行文件。导航到fabric-ca-client.exe执行文件运行如下:

export FABRIC_CA_CLIENT_HOME=$PWD

请注意,当设置了FABRIC_CA_CLIENT_HOME并且注册命令失败时,建议删除生成的FABRIC_CA_CLIENT_HOME/msp文件夹和生成的fabric-ca-client.yaml文件以避免在重新尝试注册命令之前出现混乱。

中间CA server启动失败

问题:中间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"}"

解决方案: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时,会出现此问题。若要解决此问题,请确保配置文件的 intermediate.tls.certfiles部分,指向TLS CA根证书。如果按文档流程是tls/tls-ca-cert.pem。

获取中间CA admin用户失败

问题,当你启动中间CA进程失败并出现以下错误:

Error: Response from server: Error Code: 0 - Chain file does not exist at /fabric-ca-server-int-ca/ca-chain.pem

解决方案:

因为你修改了csr部分的配置文件,你需要删除中间CA的ca-cert.pem和msp文件夹。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值