.NET 3.5 - Экспорт X509Certificate2 PublicKey - Не удается найти запрошенный объект - PullRequest
4 голосов
/ 22 февраля 2011

Я пытаюсь экспортировать открытый ключ сертификата X509Certificate2, используя следующий код:

X509Store certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
certificateStore.Open(OpenFlags.ReadOnly);
var exportCertificates = certificateStore.Certificates.Find(X509FindType.FindByThumbprint, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", false);
certificateStore.Close();

// Get Base64 string of the public key
byte[] arr = exportCertificates[0].PublicKey.EncodedKeyValue.RawData;
string b64ExportCertificate = Convert.ToBase64String(arr);

// Import the certificate
X509Certificate2 importCertificate = new X509Certificate2(Convert.FromBase64String(b64ExportCertificate));

Когда я выполняю последнюю строку, выдается следующее исключение:

System.Security.Cryptography.CryptographicException
Cannot find the requested object

Кто-нибудь знает, как решить эту проблему?

ПРИМЕЧАНИЕ. Пример кода выше «функционален», но это псевдо-код. На самом деле я экспортирую сертификат в одну заявку, а затем пересылаю в другую для цифровой подписи (следовательно, отправляю только открытый ключ)

1 Ответ

8 голосов
/ 22 февраля 2011

Отвечая на мой вопрос:

Проблема заключается в следующей строке (из образца выше):

byte[] arr = exportCertificates[0].PublicKey.EncodedKeyValue.RawData;

Это должно быть:

byte[] arr = exportCertificates[0].RawData;

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

...