hyperledger/fabric · error
The signature is invalid
Error message
The signature is invalid
What it means
identity.Verify: the BCCSP signature verification completed without transport error but returned valid=false, i.e., the signature over the message/digest does not match the identity's public key. The subject/issuer/serial of the offending cert are warned in logs.
Source
Thrown at msp/identities.go:202
digestOrMsg, err = id.msp.bccsp.Hash(msg, hashOpt)
if err != nil {
return errors.WithMessage(err, "failed computing digest")
}
}
if mspIdentityLogger.IsEnabledFor(zapcore.DebugLevel) {
mspIdentityLogger.Debugf("Verify: signer identity (certificate subject=%s issuer=%s serialnumber=%d)", id.cert.Subject, id.cert.Issuer, id.cert.SerialNumber)
// mspIdentityLogger.Debugf("Verify: digest = %s", hex.Dump(digest))
// mspIdentityLogger.Debugf("Verify: sig = %s", hex.Dump(sig))
}
valid, err := id.msp.bccsp.Verify(id.pk, sig, digestOrMsg, nil)
if err != nil {
return errors.WithMessage(err, "could not determine the validity of the signature")
} else if !valid {
mspIdentityLogger.Warnf("The signature is invalid for (certificate subject=%s issuer=%s serialnumber=%d)", id.cert.Subject, id.cert.Issuer, id.cert.SerialNumber)
return errors.New("The signature is invalid")
}
return nil
}
// Serialize returns a byte array representation of this identity
func (id *identity) Serialize() ([]byte, error) {
pb := &pem.Block{Bytes: id.cert.Raw, Type: "CERTIFICATE"}
pemBytes := pem.EncodeToMemory(pb)
if pemBytes == nil {
return nil, errors.New("encoding of identity failed")
}
// We serialize identities by prepending the MSPID and appending the ASN.1 DER content of the cert
sId := &msp.SerializedIdentity{Mspid: id.id.Mspid, IdBytes: pemBytes}
idBytes, err := proto.Marshal(sId)
if err != nil {
return nil, errors.Wrapf(err, "could not marshal a SerializedIdentity structure for identity %s", id.id)View on GitHub (pinned to 2736b63f8f)
Solutions
- Ensure the message bytes and signature come from the same signer
- Check the identity certificate matches the key used to sign
- Reject the proposal/transaction and re-authenticate the client
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at msp/identities.go:202 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of hyperledger/fabric@2736b63f8f (2026-09-04).
Data as JSON: /api/errors/5aafc45ee33d4bf6.
Report an issue: GitHub.