Search code examples
hyperledger-fabrichyperledgerhyperledger-fabric-ca

Error: Invalid private key | Hyperledger Fabric Node SDK


I am using the balance transfer sample.

I have enabled the ORDERER_GENERAL_TLS_CLIENTAUTHREQUIRED=true in orderer container.

While creating a new channel(mychannel) it was throwing error of Handshake failed with fatal error

After the error I configured the client

client.setTlsClientCertAndKey(cert, key);

 let adminClient = JSON.parse(
      fs.readFileSync(path.join(__dirname, "../fabric-client-kv-org1/admin"))
    );
    logger.info(adminClient);

    client.setTlsClientCertAndKey(
      adminClient.enrollment.identity.certificate,
      adminClient.enrollment.signingIdentity
    );

I am importing admin and then using its signingIdentity and certificate to set the tls client.

Now, it is throwing error as Invalid private key

E0619 17:15:44.135000000 139448 ssl_transport_security.cc:671] Invalid private key.
E0619 17:15:44.136000000 139448 security_connector.cc:1087] Handshaker factory creation failed with TSI_INVALID_ARGUMENT.
E0619 17:15:44.137000000 139448 secure_channel_create.cc:121] Failed to create secure subchannel for secure name 'localhost:7050'
E0619 17:15:44.137000000 139448 secure_channel_create.cc:154] Failed to create subchannel arguments during subchannel creation.
2019-06-19T11:45:47.132Z - error: [Remote.js]: Error: Failed to connect before the deadline URL:grpcs://localhost:7050
2019-06-19T11:45:47.133Z - error: [Orderer.js]: Orderer grpcs://localhost:7050 has an error Error: Failed to connect before the deadline URL:grpcs://localhost:7050

What is the cause of error and Am I using the correct client certificate and key? It is confusing in docs

https://fabric-sdk-node.github.io/tutorial-network-config.html


Solution

  • I figured out the reason for the invalid private key. The signing identity is not the private key.

    After registering the user, I am enrolling it and saving its private key and certificate locally.

     let req = {
          enrollmentID: "admin",
          enrollmentSecret: "adminpw",
          profile: "tls"
        };
    
        const enrollment = await caClient.enroll(req);
    client.setTlsClientCertAndKey(
          enrollment.certificate,
          enrollment.key.toBytes()
        );