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
.
下面的说明假定服务器配置文件存在于服务器的主目录中。
初始化服务器
fabric-ca-server init -b admin:adminpw
启动Fabric CA Server需要至少一个引导身份;此身份是服务器管理员。
服务器配置文件包含可以配置的证书签名请求(CSR)部分。以下是示例CSR。
cn: fabric-ca-server
names:
- C: US
ST: "North Carolina"
L:
O: Hyperledger
OU: Fabric
hosts:
- host1.example.com
- localhost
ca:
expiry: 131400h
pathlength: 1
上面的所有字段都属于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
选项。如果你指定了-u
选项,那么CA
证书将被父CA Server
签名。为了对父Fabric CA服务器进行身份验证,URL形式必须是://:@:
,其中
和 对应于身份
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)实现的示例
key:
algo: ecdsa
size: 256
算法和密钥大小的选择基于安全需求。
启动服务器
fabric-ca-server start -b :
如果先前未初始化服务器,则它将在第一次启动时初始化。在此初始化期间,如果它们尚不存在,则服务器将生成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都有自己的主目录
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
下面的说明假定客户端配置文件存在于客户端的主目录中。
登记引导身份
这一步非常重要,不能跳过,否则你在注册其他信息的时候就会
➜ ./fabric-ca-client register --id.name peer2 --id.type peer --id.affiliation org2.department1 --id.secret peer2pw
2021/11/29 15:16:30 [INFO] Configuration file location: /Users/xxx/workspace/zjwfa/fabric-ca-client/clients/admin/fabric-ca-client-config.yaml
2021/11/29 15:16:30 [ERROR] Enrollment check failed: Idemix enrollment information does not exist
Error: Enrollment information does not exist. Please execute enroll command first. Example: fabric-ca-client enroll -u http://user:userpw@serverAddr:serverPort
首先,如果需要,请在客户端配置文件中自定义CSR(证书签名请求)部分。请注意,CSR.CN字段必须设置为引导标识的ID。默认CSR值如下所示:
csr:
cn: <>
key:
algo: ecdsa
size: 256
names:
- C: US
ST: North Carolina
L:
O: Hyperledger Fabric
OU: Fabric CA
hosts:
- <>
ca:
pathlen:
pathlenzero:
expiry:
之后,运行fabric-ca-client enroll
命令登记身份。例如下面的命令注册其ID为Admin和Password是通过调用在7054端口本地运行的Fabric CA Server的AdminPW。
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
登记命令存储登记证书,相关的私钥,和CA证书链PEM文件在Fabric CA
客户端子目录的msp
目录下。你可以通过消息看到PEM文件存放的位置
注册一个新的身份
这里的实例是注册一个peer身份。
fabric-ca-client register --id.name peer1 --id.type peer --id.affiliation org1.department1 --id.secret peer1pw
注意,这个的--id.affiliation
指定的值必须是CA server
中配置文件中存在的值,否则就会报错
fabric-ca-client register --id.name peer4 --id.type peer --id.affiliation org6.department1 --id.secret peer4pw
2021/11/29 15:31:42 [INFO] Configuration file location: /Users/zhaojunwei/workspace/zjwfa/fabric-ca-client/clients/admin/fabric-ca-client-config.yaml
Error: Response from server: Error Code: 71 - Authorization failure
这是因为我们的CA server
配置文件中只有下面的组织和部门
affiliations:
org1:
- department1
- department2
org2:
- department1
登记一个peer身份
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
fabric-ca-client enroll -u http://peer1:peer1pw@localhost:7054 -M $FABRIC_CA_CLIENT_HOME/msp
重新登记
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/peer1
fabric-ca-client reenroll
撤销一个证书或者身份
export FABRIC_CA_CLIENT_HOME=$HOME/fabric-ca/clients/admin
fabric-ca-client revoke -e peer1