2013-12-17 3 views
0

Я использую класс System.Security.Cryptography.Pkcs.SignedCms в платформе .NET для чтения и проверки подписанных данных.Как узнать, какой сертификат был использован для подписания сообщения PKCS7?

Для этого у меня есть список действительных сертификатов, которые я передаю в методе CheckSignature.

Это отлично работает, и метод выдаст исключение, если сертификат подписи не содержится в списке.

Однако я хотел бы получить точный сертификат, который использовался для проверки сообщения. Метод CheckSignature возвращает void, а свойство Certificates на SignedCms всегда null в моем наборе данных.

Я не хочу перебирать все возможные сертификаты, особенно если метод выдаст мне исключение, если сертификат недействителен, и в списке может быть много сертификатов.

Любая идея, как это сделать?

Связанный вопрос: Есть ли способ проверить сертификат, который не будет вызывать исключение, если не найдено действительного сертификата (я бы предпочел логическое возвращаемое значение).

Спасибо!

ответ

1

Пробуйте свойство SignerInfos и посмотрите, можете ли вы извлечь сертификаты, используя возвращаемые им объекты SignerInfo.

+0

Хорошо, я нашел его! Он содержится в SignerInfos, но это немного сложно. Вы должны проверить SignerIdentifier и применить содержащееся «Value» к соответствующему типу, который в моем случае был X509IssuerSerial. Этот объект не содержит различающееся имя эмитента и серийный номер сертификата, которые являются уникальными и могут использоваться для поиска. – aKzenT

Смежные вопросы