Hyperledger Fabric:加入频道时是否需要传递 TLS cert/key 文件?
Hyperledger Fabric: Do we need to pass TLS cert/key files while joining channel?
我有一个多组织网络结构网络,运行 来自不同的主机。
对等点的 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 cert/file。所有同行都可以加入频道。
但是,当我尝试使用 peer channel fetch newest -o orderer.example.com:7050 -c examplechannel
获取最新块时,出现错误:
Serve failed to complete security handshake from "ip:43402": tls: first record does not look like a TLS handshake
另外,我提到了this doc on TLS and this doc
使用上述获取命令传递对等方的 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 failed to complete security handshake from "ip:43496": remote error: tls: bad certificate
Debugging TLS issues 文档指出当服务器不信任客户端证书时会发生这种情况。因此,就我而言,我推断订购者不信任对等方正在传递的证书。
所以
- 这是否意味着我应该通过 TLS_CERT、TLS_KEY 和 TLS_ROOT 证书同时从该节点提议加入频道?
- 如果#1 为真,我可以在不关闭网络并使用证书重新加入频道的情况下通过这些证书吗?
- 创建通道时,它使用订购者的 ca-cert。另外,在提交锚点交易时,它使用订购者的 ca 证书?那么我是否也应该将 Orderer 的 ca 证书用于 peer fetch 命令?
- 如果#3 为真,那么在生产环境中,我们是否需要构建对等容器以使其包含订购者的 ca-cert?
您的问题包含多个概念。重要的是要理解使用 peer
到 运行 对等节点 -- peer node start
-- 和使用 peer
作为 CLI(例如 peer channel fetch
).
当对等方 运行 宁作为服务器时,无需为通道传入加密 material,因为对等方实际上从传入的配置块中提取所需的 TLS 证书信息peer channel join ...
命令。
当对等方 运行ning 处于 CLI 模式时,您需要提供 TLS 证书信息才能连接到各种端点。与对等点通信时,此信息是从对等点配置中提取的(在 core.yaml
中或从相应的 CORE_
环境变量中)。与订购者通信时,有特定的命令行标志用于设置 TLS material.
我有一个多组织网络结构网络,运行 来自不同的主机。
对等点的 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 cert/file。所有同行都可以加入频道。
但是,当我尝试使用 peer channel fetch newest -o orderer.example.com:7050 -c examplechannel
获取最新块时,出现错误:
Serve failed to complete security handshake from "ip:43402": tls: first record does not look like a TLS handshake
另外,我提到了this doc on TLS and this doc 使用上述获取命令传递对等方的 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 failed to complete security handshake from "ip:43496": remote error: tls: bad certificate
Debugging TLS issues 文档指出当服务器不信任客户端证书时会发生这种情况。因此,就我而言,我推断订购者不信任对等方正在传递的证书。
所以
- 这是否意味着我应该通过 TLS_CERT、TLS_KEY 和 TLS_ROOT 证书同时从该节点提议加入频道?
- 如果#1 为真,我可以在不关闭网络并使用证书重新加入频道的情况下通过这些证书吗?
- 创建通道时,它使用订购者的 ca-cert。另外,在提交锚点交易时,它使用订购者的 ca 证书?那么我是否也应该将 Orderer 的 ca 证书用于 peer fetch 命令?
- 如果#3 为真,那么在生产环境中,我们是否需要构建对等容器以使其包含订购者的 ca-cert?
您的问题包含多个概念。重要的是要理解使用 peer
到 运行 对等节点 -- peer node start
-- 和使用 peer
作为 CLI(例如 peer channel fetch
).
当对等方 运行 宁作为服务器时,无需为通道传入加密 material,因为对等方实际上从传入的配置块中提取所需的 TLS 证书信息peer channel join ...
命令。
当对等方 运行ning 处于 CLI 模式时,您需要提供 TLS 证书信息才能连接到各种端点。与对等点通信时,此信息是从对等点配置中提取的(在 core.yaml
中或从相应的 CORE_
环境变量中)。与订购者通信时,有特定的命令行标志用于设置 TLS material.