使用 Swarm 部署的 Hyperledger Fabric 区块链网络上的证书问题

Certificate problems on Hyperledger Fabric blockchain network deployed with Swarm

我在使用 Hyperledger Fabric v1.4.4 在 Docker Swarm 上部署一个非常简单的区块链网络时遇到了这个特殊问题。它有 2 个组织(每个 2 个节点)、5 个排序器(Raft 共识)、2 个 CA(每个组织一个)和 4 个 couchDB(每个节点 1 个)。

当我尝试将对等点加入我刚刚创建的频道时出现问题。终端上显示的消息:

Error: error getting endorser client for channel: endorser client failed to connect to peer0org1:7051: failed to create new connection: context deadline exceeded

当我浏览那个对等点的日志时,我看到一条消息引起了我的注意:

createTransport -> DEBU 13c grpc: addrConn.createTransport failed to connect to {peer1car1:8051 0 }. Err :connection error: desc = "transport: authentication handshake failed: x509: certificate is valid for peer1.org1, peer1, not peer1org1". Reconnecting...

以及实际的错误消息:

UTC [core.comm] ServerHandshake -> ERRO 1b9 TLS handshake failed with error remote error: tls: bad certificate server=PeerServer remoteaddress=10.0.2.7:50504

然后我开始查看 crypto-config.yaml 文件和用于部署堆栈的 docker-compose.yaml。在 crypto-config.yaml 文件中,我将 de Domain 密钥声明为 "org1",正如您在日志中看到的,该证书对 pe​​er1org1 有效。但问题是,当我声明一个服务名称 "peer0.org1" 时,我从 Swarm 收到一个错误,说它是一个无效的名称。

我知道,我知道。日志中的消息是针对另一个同行的,但是否有与我遇到的这个问题相关的变化?关于如何解决它的任何想法?

关于另一个主题:我是容器或查询领域的新手,想知道您的意见。您会使用 Kubernetes 还是 Swarm 在生产环境中部署 Hyperledger Fabric 区块链网络?

在您的 docker 网络中有效的服务名称(我假设它是 peer1org1)需要作为主体备用名称 (SAN) 出现在 TLS 证书中。您可以在 crypto-config.yaml 中指定 SANS,如下所示:

PeerOrgs:
  - Name: org1
    Domain: org1
    EnableNodeOUs: true
    Specs:
      - Hostname: peer1
        SANS:
          - "peer1org1"
      - Hostname: peer2
        SANS:
          - "peer2org1"