在排序节点和节点之间设置 TLS 通信

Setting up TLS communication between orderers and peers

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

,我还配置了 fabric-ca 以生成具有不同配置文件的 TLS 证书

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

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

在使用 configtxgen 创建排序节点创世块时,我从 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 中?

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

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

    network_mode: host

  • 最后,每个节点都要解析其他节点的host(我知道你已经做到了)

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

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

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