Hyperledger Fabric API调用跨组织Orderer节点SSL证书验证失败求助
问题排查解决方案
报错核心为两个问题:1. TLS证书校验失败,SDK无法验证目标Orderer节点的服务证书合法性;2. 连接超时,SDK无法和发现到的其他组织Orderer节点建立gRPC连接。交易最终成功是因为SDK在多次重试后终于连接到了可用的Orderer节点,因此产生了20秒左右的额外延迟。
可按照以下优先级逐一排查:
- SDK端TLS信任根配置校验
你当前部署了3个独立组织,每个组织的Orderer节点证书由各自组织的CA签发,因此API服务所用的Fabric SDK连接配置中,必须将3个组织的CA根证书全部加入TLS信任根列表,不能仅配置当前接入组织的根证书。同时需要校验所有根证书内容格式正确,无多余字符、换行缺失等问题。 - Orderer节点TLS证书SAN字段校验
执行以下命令查看Orderer节点TLS证书的SAN(使用者备用名称)字段:
确认SAN字段中包含你SDK配置中使用的Orderer域名(如openssl x509 -in <Orderer节点TLS证书文件路径> -text -nooutorderer0.org2.example.com),如果SDK使用IP地址连接Orderer,需要确保IP也被加入SAN字段,否则会触发证书校验失败错误。 - 网络连通性校验
在部署API服务的主机上执行以下操作:- 执行
ping orderer0.org2.example.com,确认所有Orderer域名都可以正确解析到对应主机的IP - 执行
nc -zv orderer0.org2.example.com 9050,确认Orderer的gRPC端口没有被防火墙、安全组拦截,网络可达
- 执行
- SDK服务发现配置优化
如果不需要使用SDK的自动节点发现功能,可在Gateway连接配置中禁用服务发现,手动指定已经确认可用的Orderer、Peer节点地址,即可避免SDK尝试连接不可达节点导致的报错和延迟。以Node SDK为例,配置项为:const gateway = new Gateway(); await gateway.connect(ccp, { wallet, identity: userId, discovery: { enabled: false, asLocalhost: false } }); - Orderer节点TLS配置校验
检查所有Orderer节点的启动配置,确认其使用的TLS证书、私钥、CA根证书配置正确,无混用其他节点证书的问题。
内容的提问来源于stack exchange,提问作者co.blocks office
相关产品推荐
相关产品推荐

