2009-12-03 3 views
0

я используюSignedCms.CheckSignature() с обновленным сертификатом -> новый серийный номер?

SignedCms.CheckSignature (certColl, правда)

(только один серт в certColl) для проверки подписи сообщения PKCS-7. Моя проблема заключается в том, что я не хочу менять сертификат подписывающего лица (публичную часть) на моем сервере после того, как подписывающий агент обновил свой сертификат :-(Открытый ключ, эмитент и субъект остаются без изменений после того, как подписывающий подписывает его сертификат! должен работать - по крайней мере, по моему мнению, даже если я не крипто-выродка :-)

.. но, к сожалению, .NET-Framework выбрасывает криптографическое исключение «Невозможно найти оригинального подписчика», например, StackTrace говорит точно:

SignerInfo.CheckSignature (X509Certificate2Collection extraStore, Boolean verifySignatureOnly)

Это должно быть потому, что серийный номер сертификата подписанты изменилось, и свойство SignerIdentifier доступно только для чтения и установлено значение «Номер эмитента».

Кто-нибудь знает, как обходным путем это?

Или мне нужно выполнить проверку подлинности «ручной работы» с помощью sth, например: signedMessage.ComputeSignature (signer, false)?

Заранее спасибо и счастливого программирования, Krile

ответ

0

Для всех заинтересованных в этом вопросе:

Кто-то сказал мне, что это связано с PKCS # 7 спецификации, в которой говорится, что SubjectKeyIdentifier всегда устанавливается для эмитента. Серийный номер.

+0

Я забыл рассказать вам о возможном обходном пути: Вы можете поместить сертификат подписи в запрос PKCS № 7, и на вызываемой стороне у вас есть вся информация, которая вам нужна. Конечно, сертификату ЦС, который выше всего сертификата подписи (клиента), должен быть доверен. Счастливое кодирование! – Kr15