文章目录
一、Fabric CA架构概述
Fabric CA主要功能有身份注册、签发ECert、证书续签和吊销等。下图说明了Fabric CA与Fabric总体架构之间关系:
Fabric CA是典型的CS架构,包括单独的client端和server端,可以通过Fabric-CA client或SDK与server端交互。
server端也可以扩展成HA模式,Fabric CA客户端或SDK可以连接到一个server集群中的服务器,客户端路由到一个HA代理,该代理将流量负载平衡到一个fabric-ca-server集群成员。
集群中所有的Fabric CA的服务器都共享相同的数据库,以跟踪身份和证书。如果配置了LDAP,则将标识信息保存在LDAP中而不是数据库中。
一个服务器可能包含多个CAs。每个CA要么是根CA,要么是中间CA。每个中间CA都有一个父CA,它要么是根CA,要么是另一个中间CA。
二、Fabric CA Server
Fabric CA提供了三种方案去配置Fabric CA服务端和客户端,config优先级是:
- 命令行 (CLI flags)
- 环境变量(Environment variables)
- 配置文件(Configuration file)
Fabric CA Server的命令包括:
参数命令名称 | 说明 |
---|---|
start | 启动 |
Init | 初始化 |
version | 查看版本号 |
Fabric CA Server的Flags包括:
Flag | 说明 |
---|---|
-b | bootstrap identity |
-n | ca name |
-u | intermediate CA |
-d | debug |
-H | home directory |
通过init命令启动Fabric CA Server,会产生一个server目录,包含的一些文件:
文件名 | 说明 |
---|---|
ca-cert.pem | root证书 |
ca-chain.pem | intermediate证书链 |
tls-cert.pem | tls证书 |
fabric-caserver.db | 默认使用sqlite |
fabric-ca-serverconfig.yaml | 默认生成的配置文件,里面的参数通过命令行和环境变量设置 |
IssuerPublicKey | 用于identity mixer |
IssuerRevocationPublicKey | 用于identity mixer |
MSP |
Intermedia CA:
- 限制Root CA的暴露,Root CA的私钥如果泄露,将危及整个信任链,intermediate CA的私钥泄露只会影响单只,可以降低风险
- 可以跨多个组织颁发证书,灵活性很强
- intermediate CA需通过Root CA签发
- Root CA和一组intermediate CA组成证书信任链
Root CA会给自己的证书签名得到根证书,然后给下一级的Intermedia CA签发得到中间根证书,每一级CA都可以对外签发证书,如下所示:
三、Fabric CA Client
Fabric CA Client的命令包括:
参数命令名称 | 说明 |
---|---|
affiliation | |
affiliation | |
certificate | |
enroll | 给identity生成MSP |
gencrl | |
gencsr | |
getcainfo | |
identity | |
reenroll | |
register | 注册用户,可以指定id.name(名字)、id.affiliation(组织结构)、id.type(4种类型 peer orderer client user)、id.attrs(见ABAC)、id.maxenrollments(错误登录最大次数) |
revoke | 撤销用户 |
version |
Fabric CA Client的一些Flags如下:
Flag | |
---|---|
-u | URL of fabric-ca-server |
-d | debug |
-H | home directory |
-M | MSP directory |
e | revoke.name |
四、基于属性的访问控制(ABAC)
Fabric client在注册用户时,需要指定用户属性,用于作访问控制,即ABAC(Attribute-Based Access Control)。ABAC是通过chaincode做访问控制的分类和管理的。
register命令使用 'id.attrs’参数指定属性名字,enroll命令使用 'enrollment.attrs’指定属性,一些属性如下:
- Ecert里会自带3个默认属性:hf.EnrollmentID、 hf.Type、hf.Affiliation
- 如果需要定制属性,那么可以用’:ecert’给Ecert增加属性
五、证书签发请求(CSR)
需要提供CSR(certificate signing request)给证书颁发机构进行签发,才能得到一个合法的证书。CSR文件内容如下:
csr:
cn: <<enrollment ID>>
key:
algo: ecdsa
size: 256
names:
- C: US
ST: North Carolina
L:
O: Hyperledger Fabric
OU: Fabric CA
hosts:
- <<hostname of the fabric-ca-client>>
ca:
pathlen:
pathlenzero:
expiry:
上文中的“enrollment ID”为register的用户名。
六、idendity的生命周期
可以使用fabric-ca-client SDK进行identity生命周期管理,主要的生命周期包括Register、Modify、Enroll、ReEnroll、Revoke五个过程,如下所示:
- Register
第一步必须先注册新用户,命令示例如下:
fabric-ca-client register -d --id.name demouser --id.affiliation org1.department1 --id.type peer --maxenrollments -1 --id.attrs '"hf.Registrar.Roles=peer,user",hf.Revoker=true:ecert' -u <fabric-ca-server>:<port>
- Modify
- Enroll
注册用户以获取由CA签名的注册证书,命令示例如下:
fabric-ca-client enroll -u https://demouser:HSrcxfuFcoDg@<fabric-ca-server>:<port> -H <msp directory>--caname <cn.name>
- ReEnroll 证书被破坏或需要更新的时候
- Revoke 撤销现有用户或撤销特定证书(属性hf.Revoker为true的用户才有权限进行revoke)
可以使用fabric-ca-client SDK进行生命周期管理,主要有4个功能可以通过SDK进行操作,如下: