Fabric CA是Fabric中的证书颁发机构
他提供的功能有:
- 身份登记,或者连接到LDAP作为用户登记
- 颁发注册证书
- 证书的续订和撤销
Hyperlowger Fabric CA由服务器和客户组件组成,如本文档稍后所述。
1.概览
下图说明了Fabric CA server
如何在Fabric架构中发挥作用
和Fabric Server
有两种交互方式,一种是通过Fabric CA client
就是客户端,一种是Fabric SDK
.这两种方式都是通过REST APIs
.可以通过fabric-ca/swagger/swagger-fabric-ca.json
来查看接口的swagger
文档。
在一个集群中所有的Fabric CA server
共享相同的数据库为了跟踪身份和证书,如果开启了LDAP
,身份信息将保持到LDAP
上而不是数据库中。
一个服务器可能包括多个CA
颁发机构,每个CA
要么是根CA
要么是中间CA
.每个中间CA
都有一个父CA
,这个父CA
要么是一个根CA
要么也是一个中间CA
本地启动一个fabric ca server
fabric-ca-server start -b admin:adminpw
Fabric CA 提供了三种方式配置设置Fabric CA
客户端服务器。优先顺序是:
- 1.命令行选项
- 2.环境变量
- 3.配置文件
在本文档的其余部分中,我们指的是更改配置文件。但是,可以通过环境变量或CLI标志覆盖配置文件更改。
Fabric CA Server
您可以在开始之前初始化Fabric CA服务器。这为您提供了一个机会,为您生成默认配置文件,可以在启动服务器之前进行审核和自定义。
Fabric CA Server的主目录如下:
- 如果设置了-home命令行选项,请使用其值
- 否则,如果设置了fabric_ca_server_home环境变量,请使用其值
- 否则,如果设置Fabric_CA_HOME环境变量,请使用其值
- 否则,如果设置CA_CFG_PATH环境变量,请使用其值
- 否则,使用当前工作目录
对于此服务器部分的其余部分,我们假设您已设置FABRIC_CA_HOME
为$HOME/fabric-ca/server
.
下面的说明假定服务器配置文件存在于服务器的主目录中。
初始化服务器
1 | csharp复制代码fabric-ca-server init -b admin:adminpw |
启动Fabric CA Server需要至少一个引导身份;此身份是服务器管理员。
服务器配置文件包含可以配置的证书签名请求(CSR)部分。以下是示例CSR。
1 | yaml复制代码cn: fabric-ca-server |
上面的所有字段都属于X.509签名密钥和证书,由命令fabric-ca-server init
产生。这对应于服务器配置文件中的ca.certfile
和ca.keyfile
文件。这些字段如下:
- CN是常见名称
- O是组织名称
- OU 是组织单位
- L 是位置或城市
- ST 是国家
- C是国家
如果需要CSR的自定义值,则可以自定义配置文件,删除ca.certfile
和ca.keyfile
配置项指定的文件,然后再次运行fabric-ca-server init -b admin:adminpw
命令。
fabric-ca-server init
命令将产生一套自签名的CA证书除非你指定-u <parent-fabric-ca-server-URL>
选项。如果你指定了-u
选项,那么CA
证书将被父CA Server
签名。为了对父Fabric CA服务器进行身份验证,URL形式必须是<scheme>://<enrollmentID>:<secret>@<host>:<port>
,其中<enrollmentID>
和 <secret>
对应于身份hf.IntermediateCA
属性值设置为true
.fabric-ca-server init
命令将同时产生一个默认的配置文件名为fabric-ca-server-config.yaml
在服务器的主目录下。
如果您希望Fabric CA Server使用您提供的CA签名证书和key文件,则必须将文件放在CA.Certfile和CA.KEYFILE所引用的位置。这两个文件都必须是PEM编码,不得加密。更具体地说,CA证书文件的内容必须以-----BEGIN CERTIFICATE-----
和key文件的内容必须以-----BEGIN PRIVATE KEY----- -
而不是-----BEGIN ENCRYPTED PRIVATE KEY-----
可以自定义CSR以生成支持椭圆曲线(ECDSA)的X.509证书和密钥。以下设置是具有曲线prime256v1
和签名算法ecdsa-with-SHA256
的椭圆曲线数字签名算法(ECDSA)实现的示例
1 | yaml复制代码key: |
算法和密钥大小的选择基于安全需求。
启动服务器
1 | ruby复制代码fabric-ca-server start -b <admin>:<adminpw> |
如果先前未初始化服务器,则它将在第一次启动时初始化。在此初始化期间,如果它们尚不存在,则服务器将生成CA-Cert.pem和CA-key.pem文件,如果它不存在,还将创建默认配置文件。
为了让CA
服务器监听https
而不是http
,把tls.enabled
设置为true
.
限制相同秘密(或密码)的次数可用于注册,将registry.maxenrollments
消息设置为适当的值。如果将值设置为1,则Fabric CA Server允许特定注册ID的密码只能使用一次。如果将值设置为-1,则Fabric CA Server不会限制秘密可以重用注册的次数。默认值为-1。将值设置为0,Fabric CA Server将禁用所有身份的注册,并不允许注册身份。
Fabric CA服务器现在应该在端口7054上收听。
默认情况下,Fabric-CA Server由单个默认CA组成。但是,可以使用cafiles
或cacount
配置选项添加附加的CA到单个服务器。每个附加的CA都有自己的主目录
1 | sql复制代码fabric-ca-server start -b admin:adminpw --cacount 2 |
Fabric CA client
Fabric CA客户端的主目录如下:
- 如果设置了-home命令行选项,请使用其值
- 否则,如果设置fabric_ca_client_home环境变量,请使用其值
- 否则,如果设置了Fabric_ca_home环境变量,请使用其值
- 否则,如果设置CA_CFG_PATH环境变量,请使用其值
- 否则,请使用$ home / .fabric-ca-client
下面的说明假定客户端配置文件存在于客户端的主目录中。
登记引导身份
这一步非常重要,不能跳过,否则你在注册其他信息的时候就会
1 | python复制代码➜ ./fabric-ca-client register --id.name peer2 --id.type peer --id.affiliation org2.department1 --id.secret peer2pw |
首先,如果需要,请在客户端配置文件中自定义CSR(证书签名请求)部分。请注意,CSR.CN字段必须设置为引导标识的ID。默认CSR值如下所示:
1 | yaml复制代码csr: |
之后,运行fabric-ca-client enroll
命令登记身份。例如下面的命令注册其ID为Admin和Password是通过调用在7054端口本地运行的Fabric CA Server的AdminPW。
1 | bash复制代码export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin |
登记命令存储登记证书,相关的私钥,和CA证书链PEM文件在Fabric CA
客户端子目录的msp
目录下。你可以通过消息看到PEM文件存放的位置
注册一个新的身份
这里的实例是注册一个peer身份。
1 | python复制代码fabric-ca-client register --id.name peer1 --id.type peer --id.affiliation org1.department1 --id.secret peer1pw |
注意,这个的--id.affiliation
指定的值必须是CA server
中配置文件中存在的值,否则就会报错
1 | python复制代码fabric-ca-client register --id.name peer4 --id.type peer --id.affiliation org6.department1 --id.secret peer4pw |
这是因为我们的CA server
配置文件中只有下面的组织和部门
1 | yaml复制代码affiliations: |
登记一个peer身份
1 | bash复制代码export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1 |
重新登记
1 | bash复制代码export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1 |
撤销一个证书或者身份
1 | bash复制代码export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin |
本文转载自: 掘金