Ответ 1
Я считаю, что это правильно:
using (X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadWrite);
store.Add(cert); //where cert is an X509Certificate object
}
У меня есть сертификат, сгенерированный через MakeCert. Я хочу использовать этот сертификат для безопасности сообщений WCF с помощью PeerTrust. Как я могу программно установить сертификат в хранилище сертификатов локального компьютера "доверенные люди" с помощью С# или .NET?
У меня есть файл CER, но также можно создать PFX.
Я считаю, что это правильно:
using (X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadWrite);
store.Add(cert); //where cert is an X509Certificate object
}
Следующие работы подходят для меня:
private static void InstallCertificate(string cerFileName)
{
X509Certificate2 certificate = new X509Certificate2(cerFileName);
X509Store store = new X509Store(StoreName.TrustedPublisher, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
store.Close();
}
Вместо установки сертификата в LocalMachine, который требует повышенных привилегий, вы можете добавить его в "CurrentUser" (работает для меня).
X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(cert); //where cert is an X509Certificate object
store.Close();
Мне пришлось использовать X509KeyStorageFlags. PersistKeySet | X509KeyStorageFlags. Флаги MachineKeySet для устранения ошибки "Keyset не существует", возникшей позже при попытке использовать сертификат:
X509Certificate2 certificate = new X509Certificate2(pfxPath, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
{
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
store.Close();
}
Благодаря этой статье: закрытый ключ сертификата в хранилище сертификатов не читается