首页 > 解决方案 > 如何在 C# 控制台或 WinForms 应用程序中使用 Windows 安全的确认证书弹出窗口选择证书?

问题描述

我想编写一个 C# 控制台或 WinForms 应用程序来使用证书 .PFX 文件向 PDF 文件添加数字签名。目前,我可以使用 iText7 和 BouncyCastle 库,使用文件系统中文件夹中的 PFX 证书对 PDF 文件进行签名。

但我需要让用户在运行时从系统中已安装证书的列表中选择一个证书。

具体来说,我想显示 Windows 安全的确认证书对话框,并使用用户选择的证书进行签名。我想显示如下所示的弹出窗口:

Windows 安全确认证书对话框

我的具体问题是:如何触发 Windows 安全的确认证书对话框,如何读取用户选择的证书?

编辑 1:如果我使用 X509Certificate2UI.SelectFromCollection 方法,我会得到一个不同的弹出窗口,如下所示。这跟我想要的不一样。

X509Certificate2UI.SelectFromCollection 截图

标签: c#certificatedigital-signaturex509

解决方案


您可以尝试使用此处X509Certificate2UI.SelectFromCollection记录的内容。

正如评论中提到的@Crypt32,我觉得有必要添加代码示例如何使用 api。我想知道@AllSolutions 如何设法使用相同的 API 获取该 UI 窗口。用户界面似乎随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);

推荐阅读