我在使用Hyperledger Fabric v1.4.4在Docker Swarm上部署非常简单的区块链网络时遇到了这个特殊问题。它有2个组织(每个组织2个对等方),5个订购者(筏共识),2个CA(每个组织一个)和4个ouchDB(每个对等方1个)。
当我尝试将对等方加入到我刚创建的频道时,会发生问题。终端上显示的消息:
错误:获取通道的代言人客户端时出错:代言人客户端无法连接到peer0org1:7051:无法创建新的连接:超出了上下文截止日期
当我查看该对等方的日志时,看到一条消息引起了我的注意:
createTransport-> DEBU 13c grpc:addrConn.createTransport无法连接到{peer1car1:8051 0}。错误:连接错误:desc =“传输:身份验证握手失败:x509:证书对peer1.org1,peer1有效,而不对peer1org1有效”。正在重新连接...
以及实际错误消息:
UTC [core.comm] ServerHandshake-> ERRO 1b9 TLS握手失败,并出现错误远程错误:tls:错误的证书服务器= PeerServer remoteaddress = 10.0.2.7:50504
然后,我开始查看crypto-config.yaml文件和用于部署堆栈的docker-compose.yaml。在crypto-config.yaml文件中,我将de域密钥声明为“ org1”,正如您在日志中看到的那样,证书对peer1org1有效。但这是问题所在,当我声明服务名称为“ peer0.org1”时,我从Swarm收到一条错误消息,称其为无效名称。
我知道,我知道。日志中的消息是针对另一个对等方的,但是是否存在与我遇到的此问题相关的更改?关于如何解决它的任何想法?
[关于另一个主题:我是容器或问题世界的新手,想了解您的意见。您将使用Kubernetes或Swarm在生产中部署Hyperledger Fabric区块链网络吗?
在您的docker网络中有效的服务名称(我假设它是peer1org1
)需要在TLS证书中作为使用者替代名称(SAN)出现。您可以在crypto-config.yaml
中指定SANS,如下所示:
PeerOrgs:
- Name: org1
Domain: org1
EnableNodeOUs: true
Specs:
- Hostname: peer1
SANS:
- "peer1org1"
- Hostname: peer2
SANS:
- "peer2org1"