Я использую класс System.Security.Cryptography.Pkcs.SignedCms
в платформе .NET для чтения и проверки подписанных данных.Как узнать, какой сертификат был использован для подписания сообщения PKCS7?
Для этого у меня есть список действительных сертификатов, которые я передаю в методе CheckSignature
.
Это отлично работает, и метод выдаст исключение, если сертификат подписи не содержится в списке.
Однако я хотел бы получить точный сертификат, который использовался для проверки сообщения. Метод CheckSignature
возвращает void, а свойство Certificates
на SignedCms
всегда null
в моем наборе данных.
Я не хочу перебирать все возможные сертификаты, особенно если метод выдаст мне исключение, если сертификат недействителен, и в списке может быть много сертификатов.
Любая идея, как это сделать?
Связанный вопрос: Есть ли способ проверить сертификат, который не будет вызывать исключение, если не найдено действительного сертификата (я бы предпочел логическое возвращаемое значение).
Спасибо!
Хорошо, я нашел его! Он содержится в SignerInfos, но это немного сложно. Вы должны проверить SignerIdentifier и применить содержащееся «Value» к соответствующему типу, который в моем случае был X509IssuerSerial. Этот объект не содержит различающееся имя эмитента и серийный номер сертификата, которые являются уникальными и могут использоваться для поиска. – aKzenT