fabric-ca-client的使用
设置FABRIC_CA_CLIENT_HOME
环境变量:
这个环境变量指向fabric-ca-client
的工作目录,配置文件应该放在这个目录下。
export FABRIC_CA_CLIENT_HOME=/path/to/fabric-ca-client-home
生成默认配置文件(登录一个已有账户)
如果你运行fabric-ca-client enroll
命令时添加-d
参数,fabric-ca-client
会在$FABRIC_CA_CLIENT_HOME
目录下生成一个默认的fabric-ca-client-config.yaml
文件。这个文件随后可以被编辑以满足特定需求。注意这个命令要fabric-ca-server启动
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054 -d
这个命令会使用默认的管理员凭据对CA进行登记,并在$FABRIC_CA_CLIENT_HOME
下生成默认配置文件和MSP目录。
- 准备登记请求:
fabric-ca-client
首先根据命令行参数和fabric-ca-client-config.yaml
配置文件(如果存在)准备登记请求。这包括身份信息(如用户名和密码)、证书签名请求(CSR)信息等。 - 建立连接:
fabric-ca-client
然后使用指定的URL(在这个例子中是http://localhost:7054
)与Fabric CA服务器建立连接。如果配置了TLS(在生产环境中推荐),这个过程还包括TLS握手过程。 - 发送登记请求:通过建立的连接,
fabric-ca-client
发送登记请求到服务器。这个请求包括用户的身份信息(通过URL中的admin:adminpw
指定)和CSR。身份信息用于认证请求者的身份,而CSR(证书签名请求)包含了公钥和证书主题等信息,CA服务器将使用这些信息生成新的证书。 - 处理CA响应:Fabric CA服务器验证请求者的身份,并处理CSR。如果认证成功并且请求被批准,CA会使用自己的私钥对CSR中的公钥进行签名,生成新的证书。然后,CA将新证书和CA链(如果配置了)发送回客户端。
- 保存证书和密钥:
fabric-ca-client
接收到来自CA的响应后,会在本地存储新颁发的证书和与CSR对应的私钥。默认情况下,这些文件被存储在$FABRIC_CA_CLIENT_HOME/msp
目录下,具体包括:keystore/
:存放私钥。signcerts/
:存放由CA签名的证书。cacerts/
:存放CA的根证书。
- 完成登记过程:至此,登记过程完成。拥有了这些证书和私钥,用户(或节点)就可以作为网络的认证成员进行交互了。
添加-d
参数的作用是启用调试模式,这将输出更多的信息到控制台,帮助诊断问题或了解fabric-ca-client
的内部工作流程。
注册新用户
前提条件
- 确保你已经有一个运行中的Fabric CA服务器。
- 确保你已经拥有或者知道一个具有注册权限的管理员身份的凭据。在Fabric CA服务器初始化时,通常会创建一个默认管理员用户。
步骤1: 管理员登记
在注册新用户之前,管理员需要先登记自己以获得管理员证书。如果管理员已经登记过了,可以跳过这一步。
管理员的用户名和密码分别是admin
和adminpw
,并且Fabric CA服务器地址为http://localhost:7054
:
fabric-ca-client enroll -u http://admin:adminpw@localhost:7054
步骤2: 注册新用户
使用管理员身份注册新用户。你需要指定新用户的唯一--id.name
,以及为用户分配的--id.secret
(密码)。此外,你还可以指定用户的类型(--id.type
)等其他属性。
例如,注册一个名为peerUser
,密码为peerUserpw
的peer节点用户:
fabric-ca-client register --id.name peerUser --id.secret peerUserpw --id.type peer
步骤3: 为peer节点用户登记证书
注册成功后,你可以为peerUser
进行登记,以获取其证书和私钥。
fabric-ca-client enroll -u http://peerUser:peerUserpw@localhost:7054 -M /path/to/peerUser/msp
fabric-ca-client enroll -u http://peerUser:peerUserpw@localhost:7054 -M /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/peerUser/msp
这个命令将使用peer节点用户的凭据向CA服务器请求证书,获取的证书和私钥将被存储在指定的MSP目录中。这些证书和密钥对于节点的身份认证和安全通信至关重要。
命令结果:
root@localhost /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home]# fabric-ca-client enroll -u http://peerUser:peerUserpw@localhost:7054 -M /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/peerUser/msp
2024/03/24 06:23:10 [INFO] generating key: &{A:ecdsa S:256}
2024/03/24 06:23:10 [INFO] encoded CSR
2024/03/24 06:23:11 [INFO] Stored client certificate at /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/signcerts/cert.pem
2024/03/24 06:23:11 [INFO] Stored root CA certificate at /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/cacerts/localhost-7054.pem
2024/03/24 06:23:11 [INFO] Stored Issuer public key at /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/IssuerPublicKey
2024/03/24 06:23:11 [INFO] Stored Issuer revocation public key at /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/IssuerRevocationPublicKey
额外的配置:TLS证书
对于peer节点,你还可能需要为其获取TLS证书,用于安全的传输层通信。可以通过指定--enrollment.profile
参数为tls
来登记TLS证书:
fabric-ca-client enroll -u http://peerUser:peerUserpw@localhost:7054 -M /path/to/peerUser/tls --enrollment.profile tls
fabric-ca-client enroll -u http://peerUser:peerUserpw@localhost:7054 -M /home/hyh/gopath/src/github.com/hyperledger/bin/fabric-ca-client-home/peerUser/tls --enrollment.profile tls
这将为peerUser
获取TLS证书和密钥,通常会存储在节点的tls
目录中。
当使用fabric-ca-client enroll
命令登录(也就是登记)账户后,fabric-ca-client
会在本地生成一系列文件,这些文件构成了登记账户的成员服务提供者(Membership Service Provider,MSP)目录。这个MSP目录包含了证书和密钥,这些是Fabric网络中身份认证和交易签名的基础。默认情况下,这些文件被保存在$FABRIC_CA_CLIENT_HOME/msp
目录下,但也可以通过命令中的-M
选项指定其他路径。
以下是登记过程后生成的主要文件和目录:
1. keystore
- 目录路径:
msp/keystore/
- 内容:包含登记用户的私钥文件。这个私钥用于签署交易和证书请求。
- 文件示例:文件名通常是一串数字和字母,例如
fd471b62f29a..._sk
。
2. signcerts
- 目录路径:
msp/signcerts/
- 内容:包含用户的签名证书。这个证书包含了用户的公钥和身份信息,由Fabric CA签发,并且可以被网络中其他参与者验证。
- 文件示例:通常命名为
cert.pem
。
3. cacerts
- 目录路径:
msp/cacerts/
- 内容:包含一个或多个Fabric CA的根证书。这些证书用于验证签名证书链的顶端。
- 文件示例:通常包含CA的端口号,如
localhost-7054.pem
。
4. tlscacerts (如果使用TLS)
- 目录路径:
msp/tlscacerts/
- 内容:如果在登记时指定了TLS参数,这个目录将包含TLS CA的根证书,用于TLS连接的加密。
- 文件示例:与
cacerts
类似,文件名通常包含CA的端口号。
5. admincerts (可选,根据具体配置决定)
- 目录路径:
msp/admincerts/
- 内容:包含管理员的证书。在某些场景中,需要将用户的签名证书复制到这个目录来赋予管理员权限。
- 文件示例:通常命名为
Admin@org1.example.com-cert.pem
。
步骤4: 配置peer节点使用登记的证书和密钥
为了让peer节点作为peerUser
登录,你需要配置peer节点使用步骤1中获得的MSP证书和密钥。这通常涉及到编辑peer节点的配置文件(如core.yaml
)或通过环境变量指定证书和密钥的路径。
具体来说,你需要更新以下配置项:
- MSP配置:指定peer节点使用的MSP目录。这告诉节点在哪里可以找到其身份证书和私钥。
mspConfigPath: /path/to/peerUser/msp
TLS配置(如果启用):如果你的网络启用了TLS,还需要指定TLS证书和密钥的路径,以及Fabric CA服务器的根证书路径。这些信息通常在core.yaml
文件的tls
部分配置,或者作为环境变量提供。
tls:
enabled: true
clientAuthRequired: true
cert:
file: /path/to/peerUser/tls/signcerts/cert.pem
key:
file: /path/to/peerUser/tls/keystore/key.pem
rootcert:
file: /path/to/peerUser/tls/cacerts/ca-cert.pem