我尝试按照此处提供的说明为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设置或路径。第一网络(./byfn.sh)生成的证书肯定是正确的,因为byfn设置最终成功。
我认为资源管理器处理证书的方式有问题,但我不知道在哪里搜索解决方案。
非常感谢您对上述任何帮助!
答案 0 :(得分:0)
您必须在docker-compose-e2e-template.yaml中提供CA的正确凭据(网络中每个组织的msp文件夹中的ca文件夹)。
对于Eg。
FABRIC_CA_SERVER_TLS_CERTFILE =的/ etc / hyperledger /织物-CA-服务器配置/ 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 / peperOrganizations / org1.example.com / ca / ca.org1.example.com-cert.pem” let data = 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);
答案 1 :(得分:0)
以防万一,如果您使用的是测试或本地TLS Fabric对等体,则还必须执行以下操作:https://github.com/hyperledger/blockchain-explorer
“如果要连接到非TLS架构对等体,请修改对等体URL中的协议(grpcs-> grpc)和端口(9051-> 9050),并删除tls_cacerts”
我能够看到一个空白页,其中包含一个“无法获取/”和不张扬的API链接:http://localhost:9000/api-docs/#/现在很好。我只需要弄清楚特定于业务网络的密钥/证书的存储位置。
答案 2 :(得分: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处打开的其他类似问题的确给了我一些有关该问题的提示,但仍不能完全解决。
使用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_ENABLE
D从false
更改为true
,并在配置文件中将grpcs
更改为grpc
。但是在后一版本中,结构正在使用连接配置文件来帮助我们加载密钥证书。
官方连接配置文件示例文件默认使用https
,但我们可以将其更改为http
url,并强制客户端使用http策略,例如:
ca:
url: http://localhost:7054
httpOptions:
verify: true