SignedCms.CheckSignature() с обновленным сертификатом -> новый серийный номер?
Я использую
SignedCms.CheckSignature (certColl, true)
(только с одним сертификатом в certColl) для проверки подписи сообщения pkcs-7. Моя проблема в том, что я не хочу изменять (публичную часть) сертификат подписавшего на моем сервере после того, как подписчик обновил свой сертификат:-(Открытый ключ, издатель и тема остаются неизменными после того, как подписывающее лицо обновило свой сертификат! Так что это должен работать - по крайней мере, на мой взгляд, даже если я не крипто-гик:-)
... но, к сожалению,.NET-Framework генерирует криптографическое исключение "Не удается найти оригинального подписавшего", как в трассировке стека указано точно:
SignerInfo.CheckSignature (X509Certificate2Collection extraStore, Boolean verifySignatureOnly)
Это должно быть связано с тем, что серийный номер сертификата подписавшего лица изменился, а свойство SignerIdentifier доступно только для чтения и имеет значение IssuerAndSerialNumber.
Кто-нибудь знает, как это обойти?
Или я должен реализовать "подпись", проверяющую вручную с помощью sth, например: signatureMessage.ComputeSignature(signer, false)?
Заранее спасибо и счастливого программирования, Криле
1 ответ
Для всех интересующихся этим вопросом:
Кто-то сказал мне, что это связано со спецификацией PKCS #7, в которой говорится, что SubjectKeyIdentifier всегда имеет значение IssuerAndSerialNumber.