You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启用TLS的多主机Fabric网络中fabric-sdk-rest握手失败求助

解决Hyperledger Fabric SDK REST启用TLS后无法连接Peer的问题

从你提供的错误日志来看,核心问题是TLS握手时证书验证失败:

E0510 10:51:04.780559355 12247 ssl_transport_security.cc:989] Handshake failed with fatal error SSL_ERROR_SSL: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed.

结合你的多主机Docker Swarm环境和配置,我整理了几个关键排查点和解决方案:

1. 检查证书主机名匹配(最常见原因)

TLS验证要求请求的主机名必须和证书中的**Subject Alternative Name (SAN)**字段完全匹配:

  • 先查看Peer证书的SAN信息,执行命令:
    openssl x509 -in $HOME/mynetwork/crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp/signcerts/peer1.org1.example.com-cert.pem -text -noout
    
    确认输出中X509v3 Subject Alternative Name包含DNS:peer1.org1.example.com(你在datasources.json中使用的请求URL主机名)。
  • 如果你的Docker Swarm服务名是peer1而非完整域名,可能需要修改SDK配置中的requestURL为grpcs://peer1:7051,同时确保证书SAN包含DNS:peer1。

2. 修正配置中的路径问题

你的datasources.json里使用了$HOME变量,但如果fabric-sdk-rest运行在Docker容器中,$HOME指向的是容器内部路径,而非宿主机路径:

  • 确保宿主机的crypto-config目录已经挂载到容器内的指定路径(比如/crypto-config)。
  • 将配置中的所有$HOME/mynetwork/crypto-config替换为容器内的绝对路径,例如:
    "privateKey": "/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/KEY_sk",
    "signedCert": "/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem"
    

3. 完善TLS相关配置

Fabric SDK在TLS模式下需要正确指定Peer的TLS根证书,而非Peer的签名证书:

  • 检查datasources.json中的Peer配置,将publicCertFile替换为Peer组织的CA证书路径(如果用同一个CA签发所有证书):
    "peers": [
      {
        "requestURL":"grpcs://peer1.org1.example.com:7051",
        "eventURL":"grpcs://peer1.org1.example.com:7053",
        "orgIndex":"0",
        "tlsCACerts": "/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem",
        "hostname":"peer1"
      }
    ]
    
  • 同时确认Orderer的配置也使用了正确的TLS CA证书路径。

4. 验证网络连通性与TLS握手

先排除网络层面的问题:

  • 在PC2(SDK所在主机)上执行以下命令测试TLS连接:
    openssl s_client -connect peer1.org1.example.com:7051 -CAfile $HOME/mynetwork/crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem
    
    如果握手成功,说明网络和证书本身没问题,问题出在SDK配置;如果握手失败,先解决Docker Swarm overlay网络的连通性问题,确保Peer的7051端口能被PC2访问。

5. 确认版本兼容性

确保fabric-sdk-rest的版本与你使用的Hyperledger Fabric版本完全匹配,不同版本间的TLS配置逻辑可能存在差异,建议使用官方推荐的配套版本。

内容的提问来源于stack exchange,提问作者andrea magagna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:57:42