Hyperledger Fabric CA注册报错:注册信息不存在问题求助
我在Oracle VirtualBox中使用3台Ubuntu虚拟机手动搭建Hyperledger Fabric网络,所有机器处于同一网络且可互相ping通。具体配置如下:
- VM 0 - CA Server + CA Client:已成功搭建TLS CA服务器,通过本地CA Client完成引导TLS管理员的登记,还注册并登记了另一个CA Admin身份;
- VM 1 - CA Server + CA Client:已搭建组织CA服务器,引导CA管理员也通过本地CA Client完成登记;
- VM 2 - CA Client + 从VM 0复制的tls证书文件:执行peer身份注册命令时失败,报错信息为:
[ERROR] Enrollment check failed: either because 'x509 enrollment information does not exist - certFile: /home/ggggg/fabric-ca-client/msp/signcerts/cert.pem keyFile: /home/ggggg/fabric-ca-client/msp/keystore/key.pem' or '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.
执行的注册命令为:
./fabric-ca-client register -d --id.name peer1org1 --id.secret peer1org1pw --id.type peer -u https://hyprldgr-tls-ca:7054
执行命令前已设置FABRIC_CA_CLIENT_HOME和FABRIC_CA_CLIENT_TLS_CERTFILES环境变量,证书文件变量指向从VM0复制的tls-ca-cert.pem。查看TLS CA上的身份时,能看到相关身份,但奇怪的是引导身份的类型为client而非admin。目前不想使用docker或kubernetes,请问我遗漏了什么配置?
核心问题1:注册命令缺少本地管理员身份凭证
fabric-ca-client register命令必须以已完成登记(enroll)的管理员身份执行,你的VM2仅复制了TLS CA的根证书,未在本地完成管理员身份的登记操作,导致本地MSP目录下没有生成签名证书和私钥,触发了Enrollment information does not exist错误。
解决步骤:
- 在VM2上先执行管理员身份登记命令,生成本地MSP凭证:
# 确认环境变量配置正确 export FABRIC_CA_CLIENT_HOME=/home/ggggg/fabric-ca-client export FABRIC_CA_CLIENT_TLS_CERTFILES=/path/to/your/copied/tls-ca-cert.pem # 替换为VM0上已注册的CA Admin账号和密码 ./fabric-ca-client enroll -d -u https://tls-ca-admin-username:tls-ca-admin-password@hyprldgr-tls-ca:7054
执行成功后,$FABRIC_CA_CLIENT_HOME/msp目录下会自动生成signcerts、keystore等必要文件。
- 再执行原有的peer身份注册命令,此时会使用本地已登记的管理员身份完成注册操作。
核心问题2:引导身份权限不足
VM0上的引导身份类型为client,说明初始化TLS CA时未指定该身份的类型为admin,而默认client类型身份不具备注册其他身份的权限,这会导致后续用该身份注册其他身份时失败。
解决步骤:
- 在VM0上,使用初始引导身份(即使类型为client,初始引导身份通常拥有最高权限)重新注册一个
admin类型的身份:
./fabric-ca-client register -d --id.name tls-ca-admin --id.secret tls-ca-admin-pw --id.type admin -u https://hyprldgr-tls-ca:7054
- 确保VM2上使用的是这个
admin类型的身份执行登记和注册操作,只有admin类型身份才拥有注册其他身份的权限。
额外检查项
- 验证VM2上的
FABRIC_CA_CLIENT_TLS_CERTFILES路径正确,且证书文件内容与VM0上的tls-ca-cert.pem完全一致,避免复制过程中文件损坏。 - 确认VM2的
/etc/hosts文件中已将hyprldgr-tls-ca映射到VM0的IP地址,防止域名解析失败。 - 检查VM0的TLS CA配置文件
fabric-ca-server-config.yaml,确认TLS已开启,且监听端口为7054,与命令中指定的端口一致。
内容的提问来源于stack exchange,提问作者Rafiq

