Hyperledger Fabric:加入频道时,我们需要传递TLS证书/密钥文件吗?

时间:2018-08-24 07:35:10

标签: hyperledger-fabric hyperledger

我有一个由多个主机运行的多组织网络结构网络。

对等方的Docker容器已启用TLS。对等方的构建配置:

- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt

在创建和加入通道时,我遵循byfn docs,但在加入通道时未提供对等方的TLS证书/文件。所有的同行都可以加入该频道。

但是,当我尝试使用peer channel fetch newest -o orderer.example.com:7050 -c examplechannel来获取最新的块时,出现了错误:

  

服务未能通过“ ip:43402”完成安全握手:TLS:第一条记录看起来像TLS握手

此外,我在TLS和this doc上提到了this doc 通过上面的fetch命令传递对等方的TLS证书时:

peer channel fetch newest -o orderer.example.com:7050 -c examplechannel --tls --certfile $CORE_PEER_TLS_CERT_FILE --keyfile $CORE_PEER_TLS_KEY_FILE --cafile $CORE_PEER_TLS_ROOTCERT_FILE

这带来了一个新的错误:

  

grpc:Server.Serve无法从“ ip:43496”完成安全握手:远程错误:tls:证书错误

Debugging TLS issues文档指出,当服务器不信任客户端证书时会发生这种情况。因此,以我为例,我推断订购者不信任对等方通过的证书。

所以

  1. 这是否意味着我应该在建议该对等方加入频道的同时通过TLS_CERT,TLS_KEY和TLS_ROOT证书?
  2. 如果#1为真,我可以通过这些证书而无需关闭网络并使用证书重新加入通道吗?
  3. 在创建渠道时,它使用订购者的ca-cert。另外,在提交锚点对等事务时,它使用订购者的ca证书?那么我是否也应该将Orderer的ca cert用于对等获取命令?
  4. 如果#3是true,那么在生产环境中,我们是否需要构建对等容器以使其包含订购者的ca-cert?

1 个答案:

答案 0 :(得分:1)

您的问题中包含多个概念。重要的是要理解使用peer运行对等节点-peer node start和使用peer作为CLI(例如peer channel fetch)之间存在区别

当对等方作为服务器运行时,由于对等方实际上是从peer channel join ...命令中传递的配置块中提取了所需的TLS证书信息,因此无需为通道传递加密材料。

当对等方以CLI模式运行时,您确实需要提供TLS证书信息才能连接到各个端点。与对等方通信时,将从对等方配置(在core.yaml或相应的CORE_环境变量中)提取此信息。与订购者进行通信时,有一些用于设置TLS材料的特定命令行标志。