Hyperledger fabric 使用多个组织订购方创建Hyperledger结构通道时发生TLS握手错误

Hyperledger fabric 使用多个组织订购方创建Hyperledger结构通道时发生TLS握手错误,hyperledger-fabric,hyperledger,hyperledger-fabric-ca,Hyperledger Fabric,Hyperledger,Hyperledger Fabric Ca,场景:我有两个组织,每个组织中有两个同龄人。现在,我希望每个组织也提供一个订购者节点 下面是我的加密配置.yaml文件: OrdererOrgs: - Name: Orderer1 Domain: org1.xyz.com Template: Count: 1 - Name: Orderer2 Domain: org2.xyz.com Template: Count: 1 - &OrdererOrg1 Name:

场景:我有两个组织,每个组织中有两个同龄人。现在,我希望每个组织也提供一个订购者节点

下面是我的加密配置.yaml文件:

OrdererOrgs:

  - Name: Orderer1
    Domain: org1.xyz.com
    Template:
    Count: 1

  - Name: Orderer2
    Domain: org2.xyz.com
    Template:
    Count: 1
 - &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')"
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
下面是我的configtx.yaml文件:

OrdererOrgs:

  - Name: Orderer1
    Domain: org1.xyz.com
    Template:
    Count: 1

  - Name: Orderer2
    Domain: org2.xyz.com
    Template:
    Count: 1
 - &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')"
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
下面是我的docker compose cli.yaml文件:

OrdererOrgs:

  - Name: Orderer1
    Domain: org1.xyz.com
    Template:
    Count: 1

  - Name: Orderer2
    Domain: org2.xyz.com
    Template:
    Count: 1
 - &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')"
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
在创建通道时,我在订购者容器日志上收到以下错误

[core.comm]服务器握手->ERRO 015 TLS握手失败,原因是 错误远程错误:tls:错误的证书{“服务器”:“订购者”,“远程” 地址:“172.22.0.18:48594”}

那么,对于提供对等方的组织,是否可能同时提供订购方节点,或者单独的第三方组织将提供订购方节点(如教程中所述)?为什么我会犯这个错误


感谢您抽出时间,如果您需要更多信息,请告诉我。

我不知道您是如何定义网络中组织和对等方的结构的,但是,通过查看您为
--cacert
和配置文件指定的路径,在我看来,
telco1.vodworks.com
似乎没有被指定为订购方组织


总的来说,我可能会问,您确定
--cacert
的路径正确吗?

我不知道您是如何定义网络中组织和对等方的结构的,但是,通过查看您为
--cacert
和配置文件指定的路径,在我看来,
telco1.vodworks.com
似乎没有被指定为订购方组织


总的来说,我可能会问,你确定
--cacert
的路径正确吗?

我不是这里的专家,但我不确定你为什么要连接order.xyz.com?我有一个设置,看起来像您正在尝试做的,为此,您应该通过向加密配置文件(对于两个订购者)添加以下行,为要创建的每个订购节点指定一个名称:

您应该在compose文件中定义两个相应的容器,一个称为order.org1.xyz.com,另一个称为order.org2.xyz.com


然后,您应该可以通过联系order.org1.xyz.com来创建频道。

我不是这里的专家,但我不确定您为什么尝试连接到order.xyz.com?我有一个设置,看起来像您正在尝试做的,为此,您应该通过向加密配置文件(对于两个订购者)添加以下行,为要创建的每个订购节点指定一个名称:

您应该在compose文件中定义两个相应的容器,一个称为order.org1.xyz.com,另一个称为order.org2.xyz.com


然后,您应该能够通过联系order.org1.xyz.com创建频道。

我终于能够找到这个问题背后的实际原因。问题在于docker compose cli.yaml文件中订购方容器的服务名称。服务名称应与hostname.domain模式后的crypto config.yaml文件中指定的名称匹配

因此,我在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.shutils.sh脚本中的
peer channel
命令,添加了正确的订购者名称。在这两次更改之后,我成功地运行了我的网络,并通过安装链码验证了此部署


感谢@arnaud-j-le-hors提供的示例应用程序,它帮助我解决了这个问题。

我终于能够找到这个问题背后的实际原因。问题在于docker compose cli.yaml文件中订购方容器的服务名称。服务名称应与hostname.domain模式后的crypto config.yaml文件中指定的名称匹配

因此,我在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.shutils.sh脚本中的
peer channel
命令,添加了正确的订购者名称。在这两次更改之后,我成功地运行了我的网络,并通过安装链码验证了此部署


感谢@arnaud-j-le-hors提供的示例应用程序,它帮助我解决了这个问题。

就我而言,我遇到了这个错误

[core.comm] ServerHandshake -> ERRO 025 TLS handshake failed with error remote error: tls: internal error {"server": "Orderer", "remote address": "190.22.189.42:40746"}
当我使用fabric sdk连接到使用启用TLS的fabric网络时。 要解决此问题,您需要确保连接配置文件使用Orderer部分中的hostnameOverride属性,这是一个示例

orderers:
order.example.com: 网址:grpcs://localhost:7050

# these are standard properties defined by the gRPC library
# they will be passed in as-is to gRPC client constructor
grpcOptions:
  hostnameOverride: orderer.example.com
  grpc-max-send-message-length: 15
  grpc.keepalive_time_ms: 360000
  grpc.keepalive_timeout_ms: 180000
请查看下一个示例以了解更多信息:

真的,我在这个错误中工作了好几天,终于找到了解决办法


有关智利和拉丁美洲Hyperledger fabric业务和政府的更多信息、结构培训或开发区块链解决方案,请访问

[core.comm] ServerHandshake -> ERRO 025 TLS handshake failed with error remote error: tls: internal error {"server": "Orderer", "remote address": "190.22.189.42:40746"}
当我使用fabric sdk连接到使用启用TLS的fabric网络时。 要解决此问题,您需要确保连接配置文件使用Orderer部分中的hostnameOverride属性,这是一个示例

orderers:
order.example.com: 网址:grpcs://localhost:7050

# these are standard properties defined by the gRPC library
# they will be passed in as-is to gRPC client constructor
grpcOptions:
  hostnameOverride: orderer.example.com
  grpc-max-send-message-length: 15
  grpc.keepalive_time_ms: 360000
  grpc.keepalive_timeout_ms: 180000
请查看下一个示例以了解更多信息:

真的,我在这个错误中工作了好几天,终于找到了解决办法

有关智利和拉丁美洲Hyperledger fabric业务和政府的更多信息、结构培训或开发区块链解决方案,请访问

对不起,“telco1.vodworks.com”实际上是我的“org1.xyz.com”,我有