繁体   English   中英

我可以为我的超级账本结构用户使用现有证书,私钥,公钥,而不是从CA或cryptogen创建新证书吗?

[英]Can I use Existing Certificate, private key, public key for my hyperledger fabric user rather than creating new from CA or cryptogen?

我正在研究Hyperledger fabric 1.0 beta版本。 到目前为止,我已经注意到,如果使用Node sdk在对等节点上完成事务,则它将在内部向CA发送呼叫以获取新用户的加密资料(证书,私钥,公钥)。 如果我已经有用户证书,私钥,公钥,该如何使用它们将请求发送给对等方,而不是使用CA提供的加密材料。 我注意到Cryptogen实用程序还会为用户生成加密伪像。 我如何使用这些工件在对等方进行事务,而不是先致电给CA?

请分享在GO SDK中解决此问题的方法。 如有必要,我可以转到GO应用程序层。

func TestExample(t *testing.T) {
    conf, err := config.InitConfig("config.yaml")
    assert.NoError(t, err)
    cl := fabricclient.NewClient(conf)
    bccspFactory.InitFactories(nil)
    cryptoSuite := bccspFactory.GetDefault()
    privKey := "/home/yacovm/fabricDeployment/crypto-config/peerOrganizations/hrl.ibm.il/users/Admin@hrl.ibm.il/msp/keystore/213d24d189babc01e1f2e4e4cc2fd1a68bcfe95a2bdd0981ef2f9c39a00fb3f2_sk"
    pubKey := "/home/yacovm/fabricDeployment/crypto-config/peerOrganizations/hrl.ibm.il/users/Admin@hrl.ibm.il/msp/signcerts/Admin@hrl.ibm.il-cert.pem"
    user ,err := fabapi.NewPreEnrolledUser(conf, privKey, pubKey, "yacov", "PeerOrg", bccspFactory.GetDefault())
    cl.SetCryptoSuite(cryptoSuite)
    assert.NotNil(t, user)
    assert.NoError(t, err)
    cl.SetUserContext(user)
    o, err := orderer2.NewOrderer("vm1:7050",
        "/home/yacovm/fabricDeployment/crypto-config/ordererOrganizations/hrl.ibm.il/orderers/vm1.hrl.ibm.il/tls/ca.crt",
    "", conf)
    assert.NoError(t, err)
    p, err := peer.NewPeerTLSFromCert("vm2:7051", "/home/yacovm/fabricDeployment/crypto-config/peerOrganizations/hrl.ibm.il/peers/vm2.hrl.ibm.il/tls/ca.crt", "", conf)
    assert.NoError(t, err)
    ch, err := cl.NewChannel("yacov")
    ch.AddOrderer(o)
    ch.AddPeer(p)
    cl.SaveUserToStateStore(user, true)
    tp, err := ch.CreateTransactionProposal("exampleCC", "yacov", []string{"invoke", "a", "b", "1"}, true, nil)
    assert.NoError(t, err)
    assert.NotNil(t, tp)
    resp, err := channel.SendTransactionProposal(tp, 1, []apitxn.ProposalProcessor{p})
    assert.NoError(t, err)
    fmt.Println(string(resp[0].TransactionProposalResult.ProposalResponse.Response.Payload))
    txn, err := ch.CreateTransaction(resp)
    assert.NoError(t, err)
    txnResp, err := ch.SendTransaction(txn)
    assert.NoError(t, err)
    fmt.Println(txnResp[0])

    time.Sleep(time.Second * 5)

    tp, err = ch.CreateTransactionProposal("exampleCC", "yacov", []string{"query", "a"}, true, nil)
    resp, err = channel.SendTransactionProposal(tp, 1, []apitxn.ProposalProcessor{p})
    fmt.Println(string(resp[0].TransactionProposalResult.ProposalResponse.Response.Payload))
}

请参考Fabric项目中的e2e_cli示例,通过使用脚本generateArtifacts.sh,您将获得证书文件和创世块。 启动节点服务器时,您直接从现有文件中读取证书,而不是从CA服务器中获取证书,实际上,您不需要运行CA服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM