hyperledger-fabric - 使用多个组织订购者创建 Hyperledger Fabric 通道时出现 TLS 握手错误
问题描述
场景:我有两个组织,每个组织中有两个同行。现在,我希望每个组织也提供一个排序节点。
下面是我的crypto-config.yaml文件:
OrdererOrgs:
- Name: Orderer1
Domain: org1.xyz.com
Template:
Count: 1
- Name: Orderer2
Domain: org2.xyz.com
Template:
Count: 1
下面是我的configtx.yaml文件:
- &OrdererOrg1
Name: OrdererOrg01
ID: Orderer1MSP
MSPDir: crypto-config/ordererOrganizations/org1.xyz.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Orderer1MSP.member')"
Writers:
Type: Signature
Rule: "OR('Orderer1MSP.member')"
Admins:
Type: Signature
Rule: "OR('Orderer1MSP.admin')"
- &OrdererOrg2
Name: OrdererOrg02
ID: Orderer2MSP
MSPDir: crypto-config/ordererOrganizations/org2.xyz.com/msp
Policies:
Readers:
Type: Signature
Rule: "OR('Orderer2MSP.member')"
Writers:
Type: Signature
Rule: "OR('Orderer2MSP.member')"
Admins:
Type: Signature
Rule: "OR('Orderer2MSP.admin')"
下面是我的 docker-compose-cli.yaml文件:
services:
orderer.xyz.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.xyz.com
container_name: orderer.xyz.com
networks:
- byfn
orderer0.xyz.com:
extends:
file: base/docker-compose-base.yaml
service: orderer0.xyz.com
container_name: orderer0.xyz.com
networks:
- byfn
我尝试使用以下命令创建一个频道:
peer channel create -o orderer.xyz.com:7050 -t 60s -c bay -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/org1.xyz.com/orderers/orderer0.org1.xyz.com/msp/tlscacerts/tlsca.org1.xyz.com-cert.pem
在创建通道时,我在 Orderer 容器日志中收到以下错误:
[core.comm] ServerHandshake -> ERRO 015 TLS 握手失败,出现错误远程错误:tls: bad certificate {"server": "Orderer", "remote address": "172.22.0.18:48594"}
那么,对于提供对等点的组织,是否有可能也提供一个排序节点,或者一个单独的第三组织将提供排序节点(如教程中所观察到的)?为什么我会收到这个错误?
感谢您抽出宝贵时间,如果您需要任何进一步的信息,请告诉我。
解决方案
我终于能够找到这个问题背后的真正原因。问题在于docker-compose-cli.yaml文件中的排序容器的服务名称。服务名称应与crypto-config.yaml文件中指定的名称匹配,遵循 hostname.domain 模式。
因此,我更改了docker-compose-cli.yaml文件中的排序器配置,如下所示:
services:
orderer0.telco1.vodworks.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.vodworks.com
container_name: orderer.vodworks.com
networks:
- byfn
orderer0.telco2.vodworks.com:
extends:
file: base/docker-compose-base.yaml
service: orderer0.vodworks.com
container_name: orderer0.vodworks.com
networks:
- byfn
在此之后,我通过添加正确的订购者名称来修改script.sh和utils.shpeer channel
脚本中的命令。经过这几项更改后,我能够成功运行我的网络,并通过安装链代码验证了此部署。
感谢 @arnaud-j-le-hors 提供的示例应用程序帮助我解决了这个问题。
推荐阅读
- c# - 创建在两个对象之间重定向的代理类
- javascript - Javascript - 如何从另一个页面执行一个页面的功能?
- c++ - c++ 公共与私有继承
- django - 如何使用 v-html 在 vue 中显示静态 django 文件夹中的图像
- android - 应用商店中不同版本的相同版本号
- excel - VBA - 从 OLEDB 连接字符串中删除密码
- .net - 我无法在我的数据访问层访问我的登录用户 - 身份服务器 4 和 .NET 4.7.1
- nginx - Nginx 重定向 js.map , css.map
- hive - 从 Hive 分区外部表中删除特定列
- java - Java 类型擦除,带有未检查分配的通用列表