当我尝试注册“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 收到的证书的目录。
关于go - 注册成员(member)请求因签名验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39701198/