Как выбрать сертификат, используя всплывающее окно «Подтверждение сертификата» Windows Security в консоли C# или приложении WinForms? - PullRequest
0 голосов
/ 29 марта 2020

Я хочу написать консоль C# или приложение WinForms для добавления цифровой подписи в файл PDF с использованием файла сертификата .PFX. В настоящее время я могу подписывать PDF-файлы, используя сертификат PFX из папки в файловой системе, используя библиотеки iText7 и BouncyCastle.

Но мне нужно попросить пользователя выбрать сертификат во время выполнения из списка установленных сертификатов в системе.

В частности, я хочу отобразить диалоговое окно подтверждения сертификата Windows Security и подписать его, используя сертификат, выбранный пользователем. Я хочу показать всплывающее окно, показанное ниже:

Windows Security Confirm Certificate dialog box

Мой конкретный c вопрос заключается в следующем: Как вызвать диалоговое окно подтверждения сертификата Windows Security Security и как я могу прочитать сертификат, выбранный пользователем?

РЕДАКТИРОВАТЬ 1: Если я использую метод X509Certificate2UI.SelectFromCollection, я получаю другое всплывающее окно, как показано ниже. Это отличается от того, что я хочу.

X509Certificate2UI.SelectFromCollection screenshot

1 Ответ

1 голос
/ 29 марта 2020

Вы можете попробовать использовать X509Certificate2UI.SelectFromCollection, что задокументировано здесь .

Как упомянуто в комментариях @ Crypt32, я почувствовал необходимость добавления примера кода, как использовать API. Мне было интересно, как @AllSolutions удалось получить это окно пользовательского интерфейса, используя тот же API. Кажется, пользовательский интерфейс меняется с параметром selectionFlag.

var store = new X509Store("MY", StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
var collection = store.Certificates;
var cert = X509Certificate2UI.SelectFromCollection(collection, "Select", "Select a certificate to sign", X509SelectionFlag.SingleSelection);
...