Я пытаюсь установить сертификат на свой локальный компьютер (Win Server 2003) с классом X509Certificate2 в тестовом консольном приложении С#. Когда я устанавливаю сертификат со следующим кодом, все в порядке:
var serviceRuntimeMachineCertificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
serviceRuntimeMachineCertificateStore.Open(OpenFlags.ReadWrite);
cert = new X509Certificate2(certificatePath);
serviceRuntimeMachineCertificateStore.Add(cert);
serviceRuntimeMachineCertificateStore.Close();
Проблема в том, что закрытый ключ сертификата не сохраняется при установке без X509KeyStorageFlags.PersistKeySet. Итак, я попытался создать экземпляр сертификата следующим образом (закрытый ключ не имеет пароля, поэтому я передаю пустую строку):
var serviceRuntimeMachineCertificateStore = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
serviceRuntimeMachineCertificateStore.Open(OpenFlags.ReadWrite);
cert = new X509Certificate2(certificatePath, "", X509KeyStorageFlags.PersistKeySet);
serviceRuntimeMachineCertificateStore.Add(cert);
serviceRuntimeMachineCertificateStore.Close();
Но при попытке создать экземпляр сертификата возникает исключение System.Security.Cryptography.CryptographicException «Не удалось загрузить сертификат: указанный сетевой пароль неверен», даже если закрытый ключ не имеет пароля.
Если я импортирую сертификат в консоль управления Microsoft без указания пароля, он отлично работает.
Кто-нибудь знает, как это сделать программно?