【问题标题】:Setting up TLS communication between orderers and peers在 orderers 和 peers 之间设置 TLS 通信
【发布时间】:2018-07-31 00:41:28
【问题描述】:

我一直在整理 Kubernetes 设置以运行生产 Fabric 1.0.0 网络,下一步是在所有网络资源之间添加 TLS 通信。为了生成 TLS 证书,我设置了 fabric-ca 以使用多个根运行,第一个 CA 用于生成 MSP 签名证书,第二个用于生成 TLS 工件。根据this commit,我还配置了fabric-ca 以生成具有不同配置文件的TLS 证书。

TLS 证书有一个与每个服务器的主机名(“peer-x.peer”)匹配的 CN 记录,以及一些 SAN(但不是服务器的 IP 地址,因为这些是在这些容器启动之前生成的) )。

与 fabric-ca-server/client 的 TLS 通信似乎工作正常。我可以为我的所有同行和订购者创建具有这两个 CA 的注册证书。

在使用configtxgen 创建 orderer 创世块时,我从 TLS ca 中获取了 cacert,并将其放置在 org 的 msp 目录的 tlscacerts 子目录中,因此应在必要时包含它。

我已经能够成功运行peer channel createpeer channel join 命令,但是在节点加入频道后,我看到领导节点的日志中出现了这个:

[deliveryClient] StartDeliverForChannel -> DEBU 307 This peer will pass blocks from orderer service to other peers for channel lynnhurst
[ConnProducer] NewConnection -> ERRO 308 Failed connecting to orderer-2.orderer:7050 , error: x509: certificate signed by unknown authority
[ConnProducer] NewConnection -> ERRO 309 Failed connecting to orderer-1.orderer:7050 , error: x509: certificate signed by unknown authority
[ConnProducer] NewConnection -> ERRO 30a Failed connecting to orderer-0.orderer:7050 , error: x509: certificate signed by unknown authority
[deliveryClient] connect -> ERRO 30b Failed obtaining connection: Could not connect to any of the endpoints: [orderer-2.orderer:7050 orderer-1.orderer:7050 orderer-0.orderer:7050]`

这是在订购者日志中:

[grpc] Printf -> DEBU 418 grpc: Server.Serve failed to complete security handshake from "172.17.0.16:56444": EOF

显然,该 TLS 证书仍有一些不妥之处,但有人知道可能需要更改哪些内容吗?我是否需要将服务器的 IP 地址作为 SAN 包含在 TLS CSR 中?

【问题讨论】:

  • 你确保orderer的TLS证书是由TLS CA的证书签名的吗?
  • 我相信是的。 TLS 证书来自第二个 CA,使用 fabric-ca-client enroll ... --caname "TLSCA" --enrollment.profile tls 并在 orderer 的 TLS 配置中引用该密钥对。
  • 来chat.hyperledger.org,我会尽力帮助你,然后我们可以在这里发布解决方案。

标签: hyperledger-fabric


【解决方案1】:

事实证明,这是 Fabric 1.0.1 中的一个错误,如果您的 orderers 和 peers 在同一个组织中,就会出现该错误。

https://jira.hyperledger.org/browse/FAB-5845

【讨论】:

    【解决方案2】:

    您应该确保已经完成了不同的配置。

    • 您必须与网络中的其他成员共享每个组织的公钥。
    • 在定义 peer 和 orderer 时,应该为 docker 网络定义一个特定的配置。默认情况下,docker 容器无法连接到其他主机中的容器。因此,对于网络的每个容器,您应该定义:

      network_mode: 主机

    • 最后,每个节点都要解析其他节点的主机(我明白你已经做到了)

    你可以试试吗?!如果您不明白我的回答或者您需要更多信息,请再问一次,好吗?!我希望这很有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-28
      • 1970-01-01
      • 2011-04-16
      • 2019-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多