我有一个由多个主机运行的多组织网络结构网络。
对等方的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文档指出,当服务器不信任客户端证书时会发生这种情况。因此,以我为例,我推断订购者不信任对等方通过的证书。
所以
答案 0 :(得分:1)
您的问题中包含多个概念。重要的是要理解使用peer
运行对等节点-peer node start
和使用peer
作为CLI(例如peer channel fetch
)之间存在区别
当对等方作为服务器运行时,由于对等方实际上是从peer channel join ...
命令中传递的配置块中提取了所需的TLS证书信息,因此无需为通道传递加密材料。
当对等方以CLI模式运行时,您确实需要提供TLS证书信息才能连接到各个端点。与对等方通信时,将从对等方配置(在core.yaml
或相应的CORE_
环境变量中)提取此信息。与订购者进行通信时,有一些用于设置TLS材料的特定命令行标志。