访问被拒绝:hyperledger fabric channel.initialize()
access denied: hyperledger fabric channel.initialize()
我正在使用 java sdk 并在初始化频道时遇到错误。
Channel mychannel = fabClient.getInstance().newChannel(Config.CHANNEL_NAME);
Orderer orderer = fabClient.getInstance().newOrderer(Config.ORDERER_NAME, Config.ORDERER_URL);
Peer peer0_org1 = fabClient.getInstance().newPeer(Config.ORG1_PEER_0, Config.ORG1_PEER_0_URL);
Peer peer1_org1 = fabClient.getInstance().newPeer(Config.ORG1_PEER_1, Config.ORG1_PEER_1_URL);
mychannel.addOrderer(orderer);
mychannel.addPeer(peer0_org1);
mychannel.addPeer(peer1_org1);
mychannel.initialize();
我收到以下错误。
ERROR Channel - Sending proposal to peer0.org1.example.com failed because of: gRPC failure=Status{code=UNKNOWN, description=access denied: channel [mychannel] creator org [Org1MSP], cause=null}
java.lang.Exception: io.grpc.StatusRuntimeException: UNKNOWN: access denied: channel [mychannel] creator org [Org1MSP]
Caused by: org.hyperledger.fabric.sdk.exception.TransactionException: org.hyperledger.fabric.sdk.exception.ProposalException: getConfigBlock for channel mychannel failed with peer peer1.org1.example.com. Status FAILURE, details: Sending proposal to peer1.org1.example.com failed because of: gRPC failure=Status{code=UNKNOWN, description=access denied: channel [mychannel] creator org [Org1MSP], cause=null}
这表明 Fabric CA 服务器用于颁发证书的签名 CA 证书与用于进行授权检查的 MSP 的 cacerts 或 intermediatecerts 文件夹中的证书不匹配。
用于进行授权检查的 MSP 取决于发生错误时您正在执行的操作。例如,如果您尝试在对等点上安装链码,则会使用对等点文件系统上的本地 MSP;否则,如果您正在执行一些特定于通道的操作,例如在特定通道上实例化链代码,则使用创世块中的 MSP 或通道的最新配置块。
发生这种情况的原因有多种,包括:
- 您使用 cryptogen 生成密钥 material 但没有使用 cryptogen 生成的签名密钥和证书启动 fabric-ca-server。
- 停止 fabric-ca-server。
- 复制crypto-config/peerOrganizations//ca/*pem到
$FABRIC_CA_SERVER_HOME/ca-cert.pem。
- 复制crypto-config/peerOrganizations//ca/*_sk 到$FABRIC_CA_SERVER_HOME/msp/keystore/。
- 启动 fabric-ca-server。
- 删除之前颁发的所有注册证书并通过重新注册获取新证书。
- 您在生成创世块后删除并重新创建了 Fabric CA 服务器使用的 CA 签名密钥和证书。如果 Fabric CA 服务器在 docker 容器中 运行,容器已重新启动,并且其主目录不在卷装载上,则可能会发生这种情况。在这种情况下,Fabric CA 服务器将创建一个新的 CA 签名密钥和证书。
我正在使用 java sdk 并在初始化频道时遇到错误。
Channel mychannel = fabClient.getInstance().newChannel(Config.CHANNEL_NAME);
Orderer orderer = fabClient.getInstance().newOrderer(Config.ORDERER_NAME, Config.ORDERER_URL);
Peer peer0_org1 = fabClient.getInstance().newPeer(Config.ORG1_PEER_0, Config.ORG1_PEER_0_URL);
Peer peer1_org1 = fabClient.getInstance().newPeer(Config.ORG1_PEER_1, Config.ORG1_PEER_1_URL);
mychannel.addOrderer(orderer);
mychannel.addPeer(peer0_org1);
mychannel.addPeer(peer1_org1);
mychannel.initialize();
我收到以下错误。
ERROR Channel - Sending proposal to peer0.org1.example.com failed because of: gRPC failure=Status{code=UNKNOWN, description=access denied: channel [mychannel] creator org [Org1MSP], cause=null}
java.lang.Exception: io.grpc.StatusRuntimeException: UNKNOWN: access denied: channel [mychannel] creator org [Org1MSP]
Caused by: org.hyperledger.fabric.sdk.exception.TransactionException: org.hyperledger.fabric.sdk.exception.ProposalException: getConfigBlock for channel mychannel failed with peer peer1.org1.example.com. Status FAILURE, details: Sending proposal to peer1.org1.example.com failed because of: gRPC failure=Status{code=UNKNOWN, description=access denied: channel [mychannel] creator org [Org1MSP], cause=null}
这表明 Fabric CA 服务器用于颁发证书的签名 CA 证书与用于进行授权检查的 MSP 的 cacerts 或 intermediatecerts 文件夹中的证书不匹配。
用于进行授权检查的 MSP 取决于发生错误时您正在执行的操作。例如,如果您尝试在对等点上安装链码,则会使用对等点文件系统上的本地 MSP;否则,如果您正在执行一些特定于通道的操作,例如在特定通道上实例化链代码,则使用创世块中的 MSP 或通道的最新配置块。
发生这种情况的原因有多种,包括:
- 您使用 cryptogen 生成密钥 material 但没有使用 cryptogen 生成的签名密钥和证书启动 fabric-ca-server。
- 停止 fabric-ca-server。
- 复制crypto-config/peerOrganizations//ca/*pem到 $FABRIC_CA_SERVER_HOME/ca-cert.pem。
- 复制crypto-config/peerOrganizations//ca/*_sk 到$FABRIC_CA_SERVER_HOME/msp/keystore/。
- 启动 fabric-ca-server。
- 删除之前颁发的所有注册证书并通过重新注册获取新证书。
- 您在生成创世块后删除并重新创建了 Fabric CA 服务器使用的 CA 签名密钥和证书。如果 Fabric CA 服务器在 docker 容器中 运行,容器已重新启动,并且其主目录不在卷装载上,则可能会发生这种情况。在这种情况下,Fabric CA 服务器将创建一个新的 CA 签名密钥和证书。