使用 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",正如您在日志中看到的,该证书对 peer1org1 有效。但问题是,当我声明一个服务名称 "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"
我在使用 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",正如您在日志中看到的,该证书对 peer1org1 有效。但问题是,当我声明一个服务名称 "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"