go - 注册成员(member)请求因签名验证失败

标签 go hyperledger hyperledger-fabric

当我尝试注册“admin”用户时,第二次调用 CreateCertificatePair 失败并显示“签名验证失败”消息。顺便说一句,我从 eca_test.go 复制了 enrollUser 函数。 membersrvc/ca 包下的那些测试都可以通过。

//Phase 2 of the protocol
spi := ecies.NewSPI()
eciesKey, err := spi.NewPrivateKey(nil, encPriv)
if err != nil {
    return err
}

ecies, err := spi.NewAsymmetricCipherFromPublicKey(eciesKey)
if err != nil {
    return err
}

out, err := ecies.Process(resp.Tok.Tok)
if err != nil {
    return err
}

req.Tok.Tok = out
req.Sig = nil

hash := primitives.NewHash()
raw, _ := proto.Marshal(req)
hash.Write(raw)

r, s, err := ecdsa.Sign(rand.Reader, signPriv, hash.Sum(nil))
if err != nil {
    return err
}
R, _ := r.MarshalText()
S, _ := s.MarshalText()
req.Sig = &pb.Signature{Type: pb.CryptoType_ECDSA, R: R, S: S}

resp, err = ecapCient.CreateCertificatePair(context.Background(), req)

最佳答案

正如 Sergey 提到的,CreateCertificatePair 请求创建一个新的证书对,
根据文档,

在注册期间,应用程序向证书颁发机构发送请求以验证用户注册,如果成功,CA 将以用户证书和 key 作为响应。

在用户身份验证成功后,应用程序将向 CA 执行一次用户注册。如果为同一用户第二次尝试注册,将导致错误。 这就是第二次调用 CreateCertificatePair 失败的原因。 如果你真的想注册一个之前已经注册过的用户,你需要删除CA服务器进程创建的临时文件(客户端注册证书,注册 key ,交易证书链等),并做那,运行下面的命令,

rm -rf /var/hyperledger/production

/var/hyperledger/production 是存储从 CA 收到的证书的目录。

来源:Note on security functionality

关于go - 注册成员(member)请求因签名验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39701198/

相关文章:

go - channel 数组

hyperledger-fabric - super 账本结构 : Do we need to pass TLS cert/key files while joining channel?

hyperledger-fabric - 无法调用链码

go - 从bigquery开放式数据库中查询IP地理位置数据:geolite2

class - 如何从函数/方法将数据保存在 Go 结构中?

git - 无法连接到 GitHub - 下载 Go 函数时出现问题 - 连接超时

docker - Hyperledger测试网络-无法创建新的连接: context deadline exceeded

docker - 在 Ubuntu18.04 上使用 Fabric 1.4 以 "fatal error: unexpected signal during runtime execution"启动后,对等点立即退出

hyperledger - 如何使用 Docker 设置具有多个主机的 super 账本结构?

mongodb - Golang mgo MongoDB bson.ObjectId 非 utf-8 错误