У меня есть код С# 4.0, который пытается установить сертификат CA (.der encoded) в хранилище доверенных корневых центров сертификации для текущего (My) пользователя. Мое маленькое консольное приложение тихо работает с другими магазинами, но для этого магазина появляется всплывающее окно с графическим интерфейсом. "Вы собираетесь установить сертификат из центра сертификации... Windows не может подтвердить, что сертификат на самом деле из..... У вас есть хотите установить этот сертификат?"
Это сообщение является проблемой, потому что идея заключается в том, чтобы автоматически развертывать приложение с помощью MSI и молча получать нужные сертификаты в нужном месте. Наличие модального окна приведет к автоматическому развертыванию.
Как эта установка может быть выполнена без всплывающего окна сообщений?
Ответ 1
Это может звучать нелогично, но чтобы не было предупреждения, вы должны добавить сертификат не в хранилище корневого каталога текущего пользователя, а вместо корневой части локального компьютера. Вы можете легко убедиться, что
certmgr.exe -add -c t.cer -s -r currentUser root
вывести предупреждение о безопасности, но
certmgr.exe -add -c t.cer -s -r localMachine root
нет.
Итак, если вы хотите импортировать сертификат в .NET, то соответствующий код может быть примерно следующим
using System;
using System.Security.Cryptography.X509Certificates;
namespace AddCertToRootStore {
class Program {
static void Main (string[] args) {
X509Store store = new X509Store (StoreName.Root,
StoreLocation.LocalMachine);
store.Open (OpenFlags.ReadWrite);
X509Certificate2Collection collection = new X509Certificate2Collection();
X509Certificate2 cert = new X509Certificate2 (@"C:\Oleg\t.cer");
byte[] encodedCert = cert.GetRawCertData();
Console.WriteLine ("The certificate will be added to the Root...");
store.Add (cert);
Console.WriteLine("Verify, that the certificate are added successfully");
Console.ReadKey ();
Console.WriteLine ("The certificate will be removed from the Root");
store.Remove (cert);
store.Close ();
}
}
}