1

当我尝试注册“管理员”用户时,对 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)
4

2 回答 2

1

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

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

用户认证成功后,应用程序将向 CA 执行一次用户注册。如果同一用户再次尝试注册,则会出现错误。 这就是第二次调用CreateCertificatePair失败的原因。如果你真的想注册一个之前已经注册过的用户,你需要删除CA服务器进程创建的临时文件(客户端注册证书、注册密钥、交易证书链等),然后做那,运行以下命令,

rm -rf /var/hyperledger/production

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

来源:关于安全功能的说明

于 2016-09-26T12:10:45.747 回答
0

CreateCertificatePair 请求 ECA 创建新的注册证书对。“注册”证书是唯一的,每个用户只能由 ECA 创建一次

对同一用户的第二次调用CreateCertificatePair将导致错误。

于 2016-09-26T11:30:25.760 回答