Hyperledger Composer多Peer Fabric网络Ping失败问题求助
从你给出的报错日志和操作步骤来看,这个问题的核心是Peer无法信任事件消息的签名身份——一方面提示签名身份和Peer不属于同一个组织,另一方面说证书是由未知权威签发的。结合你的单Org Fabric网络配置,我帮你一步步拆解排查和修复方法:
核心问题拆解
报错里的两个关键信息:
event message must be properly signed by an identity from the same organization as the peer
The supplied identity is not valid, Verify() returned x509: certificate signed by unknown authority
这说明要么你用来Ping网络的身份证书不是Peer所属Org的CA签发的,要么Peer的MSP信任根里没有包含这个CA的根证书,大概率是在卡片创建、身份请求或者connection.json配置环节出了疏漏。
分步排查与修复
1. 先检查connection.json的配置正确性
这是最容易出问题的环节,一定要确保:
- 你的
organizations字段里,Org1的mspid和Peer容器启动时的MSP ID一致(应该是Org1MSP) certificateAuthorities部分要正确指向Org1 CA的根证书,路径通常是/home/ubuntu/multipeer/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem- Peer的
tlsCACerts路径要指向对应Peer的TLS CA证书,比如peer0的是crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
给你一个参考的正确片段:
{ "name": "hlfv1", "x-type": "hlfv1", "client": { "organization": "Org1" }, "organizations": { "Org1": { "mspid": "Org1MSP", "peers": ["peer0.org1.example.com", "peer1.org1.example.com"], "certificateAuthorities": ["ca.org1.example.com"] } }, "certificateAuthorities": { "ca.org1.example.com": { "url": "http://localhost:7054", "caName": "ca.org1.example.com", "tlsCACerts": { "path": "/home/ubuntu/multipeer/fabric-scripts/hlfv1/composer/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem" } } } }
2. 验证composer identity request生成的证书
你执行了composer identity request -c PeerAdmin@hlfv1 -u admin -s adminpw -d bala02来获取身份证书,要确认:
- 这里的
-u admin和-s adminpw确实是你的Fabric CA的管理员账号密码(默认是admin/adminpw,如果你修改过要对应) - 生成的
bala02/admin-pub.pem是由Org1 CA签发的,用openssl验证一下:
openssl x509 -in bala02/admin-pub.pem -text -noout | grep Issuer
输出应该是Issuer: CN=ca.org1.example.com,和你的Org CA一致。
3. 修正composer network start的参数
你的启动命令里-A bala01但后面创建卡片用的是bala02,这里身份名称不匹配,会导致后续身份无法关联到网络。调整命令为:
composer network start -c PeerAdmin@hlfv1 -a commodity-network@0.0.1.bna -A bala02 -C bala02/admin-pub.pem
确保-A指定的身份名称和后面卡片的-u bala02完全一致,并且-C指向的是刚才从CA获取的正确公钥。
4. 重新创建并导入用户卡片
先删掉之前的旧卡片,避免冲突,再重新生成:
# 删除旧卡片 composer card delete -c bala02@commodity-network # 重新创建卡片,确认私钥和公钥路径正确 composer card create -p connection.json -u bala02 -n commodity-network -c bala02/admin-pub.pem -k bala02/admin-priv.pem # 导入新卡片 composer card import -f bala02@commodity-network.card
这里要注意admin-priv.pem是composer identity request生成的私钥,路径不能错。
5. 检查Peer容器的MSP配置
如果上面的步骤都没问题,那可能是Peer启动时挂载的MSP目录不对,导致Peer信任根里没有Org1 CA的证书:
# 进入peer0容器 docker exec -it peer0.org1.example.com bash # 查看cacerts目录下的文件 ls /etc/hyperledger/fabric/msp/cacerts/
正常应该有ca.org1.example.com-cert.pem,如果没有,说明Peer启动时的挂载路径错误,需要重新启动Peer容器,确保挂载的是crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp目录。
最后验证
完成所有步骤后,重新执行Ping命令:
composer network ping -c bala02@commodity-network
如果还是有问题,建议查看Peer的完整日志,确认是否还有其他证书路径或者MSP配置的细节问题。
内容的提问来源于stack exchange,提问作者Balaji

