Как прочитать цепочку сертификатов Pkcs # 7 из файла / потока в C#?

У меня есть два сертификата, которые я сохранил на диск. Один - это сертификат с закрытым ключом, который я экспортировал как файл .pfx, другой - сертификат, который я сохранил, включая его цепочку сертификатов в виде файла PKCS # 7 («certchain.p7b»).

В C# теперь я могу загрузить файл .pfx с помощью

  var cert = new X509Certificate2(myPfxFileStream); 

(myPfxFileStream FileStream открыт для чтения в файле .pfx), однако попытка сделать то же самое с сертификатом PKC# 7 не удается в CryptoGraphicException «Der Indexwert ist ungültig», что переводится как «недопустимое значение индекса».

Я предполагаю, что мне нужно разобрать PKCS # 7 по-другому (он содержит цепочку, а не один сертификат!), Но как?

(О, кстати: в настоящее время у меня нет паролей от этих сертификатов)

Ответов (1)

Решение

Вы захотите использовать SignedCmsкласс в System.Security.Cryptography.Pkcsпространстве имен.

Эта запись в блоге покажет вам, как использовать класс:

обновление ссылки 2021: https://docs.microsoft.com/en-us/archive/blogs/shawnfa/enveloped-pkcs-7-signatures

исходная ссылка: http://blogs.msdn.com/shawnfa/archive/2006/02/27/539990.aspx

Вы в основном вызываете Decodeметод, передавая байты, представляющие файл PKCS.