Обнаружение предупреждения об установке сертификата?

У меня есть код С# 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 ();
        }
    }
}