c# - 如何在 C# 控制台或 WinForms 应用程序中使用 Windows 安全的确认证书弹出窗口选择证书?
问题描述
我想编写一个 C# 控制台或 WinForms 应用程序来使用证书 .PFX 文件向 PDF 文件添加数字签名。目前,我可以使用 iText7 和 BouncyCastle 库,使用文件系统中文件夹中的 PFX 证书对 PDF 文件进行签名。
但我需要让用户在运行时从系统中已安装证书的列表中选择一个证书。
具体来说,我想显示 Windows 安全的确认证书对话框,并使用用户选择的证书进行签名。我想显示如下所示的弹出窗口:
我的具体问题是:如何触发 Windows 安全的确认证书对话框,如何读取用户选择的证书?
编辑 1:如果我使用 X509Certificate2UI.SelectFromCollection 方法,我会得到一个不同的弹出窗口,如下所示。这跟我想要的不一样。
解决方案
您可以尝试使用此处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);
推荐阅读
- python - 如何使用 TensorFlow tf.data.Dataset flat_map 生成派生数据集?
- kendo-ui - 为什么 Kendo View 上的“显示”事件会触发两次?
- javascript - 使用 Dataloader 处理 GraphQL 字段参数?
- react-native - 当我退出应用程序时,本地存储变量被重新初始化
- java - 如何从数组中获取值而不计算其重复项?
- json - JSON行和文档类型之间的区别
- c++ - c++ 中有替代的 str.find 吗?
- machine-learning - 如何保存经过训练的 ARIMA 模型以供以后使用
- google-apps-script - 将数据输入空白列后,Google 表格代码将发送带有选定单元格的电子邮件
- ruby-on-rails - 显示 RoR 应用程序结构的数据可视化组件