Certificate SignedCms.CheckSignature()与续订证书->;新连续剧?

Certificate SignedCms.CheckSignature()与续订证书->;新连续剧?,certificate,digital-signature,x509certificate2,pkcs#7,Certificate,Digital Signature,X509certificate2,Pkcs#7,我正在使用 SignedCms.CheckSignature(certColl,true) (certColl中只有一个证书)验证pkcs-7消息的签名。我的问题是,我不想在签名者更新证书后更改我服务器上的签名者证书的(公共部分):(签名者更新证书后,公钥、颁发者和主题保持不变!因此这必须起作用-至少在我看来,即使我不是加密极客:-) …但是,不幸的是,.NET Framework抛出了一个加密异常“找不到原始签名者”,正如stacktrace所说的: SignerInfo.CheckSigna

我正在使用

SignedCms.CheckSignature(certColl,true)

(certColl中只有一个证书)验证pkcs-7消息的签名。我的问题是,我不想在签名者更新证书后更改我服务器上的签名者证书的(公共部分):(签名者更新证书后,公钥、颁发者和主题保持不变!因此这必须起作用-至少在我看来,即使我不是加密极客:-)

…但是,不幸的是,.NET Framework抛出了一个加密异常“找不到原始签名者”,正如stacktrace所说的:

SignerInfo.CheckSignature(X509Certificate2Collection外部存储,布尔验证签名)

这一定是因为签名者证书的序列号已更改,且SignerIdentifier属性为只读,并设置为IssuerAndSerialNumber

有人知道如何解决这个问题吗

或者我必须实现一个“手工”签名来验证诸如:signedMessage.ComputeSignature(签名者,false)之类的东西吗

提前感谢,祝您节目愉快,
Krile

对于所有对此问题感兴趣的人:


有人告诉我这是由于PKCS#7规范,该规范规定SubjectKeyIdentifier始终设置为IssuerAndSerialNumber

我忘了告诉您一个可能的解决方法:您可以将签名证书放入PKCS#7请求中,在被叫方您可以获得所需的所有信息。当然,CA证书(首先是签名(客户端)证书)必须是可信的。快乐编码!