0

我尝试按照此处提供的说明为 Hyperledger Fabric 1.0 部署 Hyperledger Blockchain Explorer:https ://github.com/hyperledger/blockchain-explorer

但是,每当我尝试启动 main.js 时,我都会收到以下错误:

`[2017-11-17 20:57:53.785] [ERROR] Helper - Error: Calling enrollment endpoint failed with error [Error: write EPROTO 140480353146688:error:1411713E:SSL routines:ssl_check_srvr_ecc_cert_and_alg:ecc cert not for signing:../deps/openssl/openssl/ssl/ssl_lib.c:2520:
140480353146688:error:14082130:SSL routines:ssl3_check_cert_and_algorithm:bad ecc cert:../deps/openssl/openssl/ssl/s3_clnt.c:3550:
]
at ClientRequest.<anonymous> (/opt/gopath/src/github.com/hyperledger/blockchain-explorer/node_modules/fabric-ca-client/lib/FabricCAClientImpl.js:711:12)
at emitOne (events.js:116:13)
at ClientRequest.emit (events.js:211:7)
at TLSSocket.socketErrorListener (_http_client.js:387:9)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7)
at onwriteError (_stream_writable.js:408:12)
at onwrite (_stream_writable.js:430:5)
at _destroy (internal/streams/destroy.js:39:7)
at TLSSocket.Socket._destroy (net.js:561:3)
[2017-11-17 20:57:53.787] [ERROR] Helper - admin enrollment failed`

我确保 config.json 配置正确。我没有编辑 tls 设置或路径。first-network (./byfn.sh) 生成的证书绝对正确,因为 byfn 设置最终成功。

我认为 Explorer 处理证书的方式有问题,但我不知道在哪里搜索解决方案。

任何有关上述内容的帮助将不胜感激!

4

3 回答 3

0

当我使用 Hyperledger Fabric 1.2 版本部署区块链浏览器时,问题再次抛出,但最重要的解决方案无法解决我的问题:

unknown protocol SSL routines:ssl3_check_cert_and_algorithm:bad ecc cert:../deps/openssl/openssl/ssl/s3_clnt.c:3550:

起初,我认为它是由版本不兼容引起的,因为在我将网络升级到结构 1.2 或 1.1 之前它似乎工作正常。但是,为了区块链浏览器,没有必要将我的结构网络降级到 1.0。在github / composer上打开的其他类似问题确实给了我一些关于这个问题的提示,但仍然不能完全解决它。

像 do 一样使用同步调试工具node --inspect-brk:0.0.0.0:9229 server.js帮助我解决了这个问题:

我的错误日志与上面打印的日志相同,发生在FabricCAClientImpl.js:711:12. 要转到代码的定义,它会在以下位置引发错误:

request.on('error', function (err) {
reject(new Error(util.format('Calling enrollment endpoint failed with error [%s]', err)));
});

self._httpClient.request使用发送http请求后调用该函数:

var request = self._httpClient.request(requestOptions, function (response)

查看 的定义self._httpClient,它表明模块https是在代码的头部导入的。这就是为什么一些解决方案建议我们将TLS_ENABLED 从更改false为,并在配置文件中true修改grpcs为。grpc但在后一个版本中,fabric 使用连接配置文件来帮助我们加载密钥证书。

默认使用官方的连接配置文件示例文件https,但我们可以将其更改为httpurl 并强制客户端使用 http 策略,例如:

ca:
  url: http://localhost:7054
  httpOptions:
     verify: true
于 2018-09-12T07:55:42.840 回答
0

如果您使用的是测试或本地 TLS Fabric 对等体,您还必须执行以下操作:https ://github.com/hyperledger/blockchain-explorer

“如果您要连接到非 TLS 结构对等体:请修改对等体 url 中的协议 (grpcs->grpc) 和端口 (9051-> 9050) 并删除 tls_cacerts”

我可以看到一个带有“无法获取/”的空白页面和招摇的 API 链接:http://localhost:9000/api-docs/#/现在很好。我只需要弄清楚业务网络特定密钥/证书的存储位置。

于 2018-08-09T18:13:31.880 回答
0

您必须在 docker-compose-e2e-template.yaml 中提供正确的 CA 凭据(网络中每个组织的 msp 文件夹中存在的 ca 文件夹)。

例如。

  • FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem

  • FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/f0a8e7e64651071b720e47eb4c71a3610cadb185a1ace6c029d8b41688fde6b2_sk

在卷部分以这种方式给出映射 - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config

不要在 url 中使用 localhost,而是使用 Docker 使用的 IP(仅当您使用 Docker QuickStart Terminal 时适用)(在我的情况下,它是 192.168.99.100)。

在enrollAdmin.js 文件中,

var caRootsPath = "./crypto-config/peerOrganizations/org1.example.com/ca/ca.org1.example.com-cert.pem" 让数据 = fs.readFileSync(caRootsPath); 让 caroots = Buffer.from(data).toString();

var tlsOptions = {
    trustedRoots: caroots,
    verify: true // Make it false if some error like Hostname/IP doesn't match certificate's altnames: "IP: 192.168.99.100 is not in the cert's list occurs. This error can also be removed if you have admin access to your computer. 
};
// be sure to change the http to https when the CA is running TLS enabled
fabric_ca_client = new Fabric_CA_Client('https://192.168.99.100:7054', tlsOptions , 'ca-org1', crypto_suite);
于 2018-03-23T08:44:53.280 回答