c# - 如何使用 C# 控制台或 WinForms 应用程序中的 Windows 安全性确认证书弹出窗口选择证书?

标签 c# certificate digital-signature x509

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

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

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

Windows Security Confirm Certificate dialog box

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

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

X509Certificate2UI.SelectFromCollection screenshot

最佳答案

您可以尝试使用X509Certificate2UI.SelectFromCollection(记录在 here) .

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

关于c# - 如何使用 C# 控制台或 WinForms 应用程序中的 Windows 安全性确认证书弹出窗口选择证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60915878/

相关文章:

c# - LINQ 表达式返回 null

c# - EntityFramework 6 现有数据库和新数据库的迁移?

code-signing - Windows 代码签名过程和 MS signtool.exe 的替代方案?

Android 模拟器似乎不信任浏览器中的安全证书

c++ - 我们如何在 C++ 和 Windows API 中验证 openssl 数字签名

ios - iOS 和 MacOSX 上的私钥签名不同

C# 显式定义抛出的异常

c# - 如何在 Xamarin Android C# 中将两个 Activity 安装为一个应用程序

c# - 执行 SSL Pinning 时忽略 SslPolicyErrors 是否安全?

firefox - 如何使用 Selenium 禁用 Firefox 的不可信连接警告?