将 A3 证书与服务一起使用

Posted

技术标签:

【中文标题】将 A3 证书与服务一起使用【英文标题】:Using A3 certificate with a Service 【发布时间】:2015-06-15 18:13:07 【问题描述】:

我在服务中使用 A1 证书(数字证书)没有任何错误。

A3 证书 (SmartCard) 需要 PIN 才能开始工作。问题是服务不会显示任何输入 PIN 的窗口。

有没有办法让服务显示 PIN 窗口?

【问题讨论】:

服务实际上是不允许与 UI 交互的。 ***.com/questions/12953148/… 即使弹出的 PIN 码不是我的?智能卡管理器应该会显示。 不,不应该。自 Vista 以来的一切都是这样。 即使您从您的服务启动或调用的应用程序或其他任何不属于您的应用程序,它都不会影响它的显示。查找会话 0 隔离。更多链接:programmers.stackexchange.com/questions/180833/… 【参考方案1】:

我猜您的服务正在使用 Microsoft CryptoAPI 与智能卡进行交互。虽然在大多数情况下这是最简单的方法,但它不能让您完全控制智能卡/应用程序的行为,即您无法控制何时显示 PIN 对话框,您无法自定义 PIN 对话框等。

你可以试试这个方法:

    确保名为 “Interactive Services Detection” 的 Windows 服务已启动并在您的系统上运行。 更改 Windows 服务的属性(在服务列表中右键单击它并选择“属性”菜单项)并选中“登录”上的“允许服务与桌面交互”选项" 选项卡。 启动您的服务,您的桌面应切换到session0,其中将显示 PIN 对话框。

如果上述方法不起作用并且您可以修改服务的源代码,那么您可以尝试使用 PKCS#11 API 而不是 MS CryptoAPI。 PKCS#11 API 让您可以更好地控制智能卡/应用程序行为,并且可以通过我所编写的 Pkcs11Interop 库在 .NET 应用程序中方便快捷地使用它。

【讨论】:

我不需要自定义 PIN 对话框。我只需要在尝试使用证书时显示该对话框。我只是搜索证书存储并作为 X509 对象打开。 @NickeManarin 您是否尝试启用我的回答中建议的桌面交互? 我没试过。服务需要访问客户证书,因此必须在特定帐户下运行。检查...Interact with desktop 的唯一方法是检查Local System Account

以上是关于将 A3 证书与服务一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Apple Push Notification 与生产服务 URL 上的开发证书一起使用

将客户端证书与 WebSocket4Net 一起使用

当服务器具有有效的 SSL 证书时,将 WebClient.UploadFile() 与“https”一起使用时出现“握手失败...意外的数据包格式”

将 EV 证书与 ClickOnce 一起使用

将下拉菜单与 PayPal 订阅一起用于“A3”参数

将 Windows 证书存储中的证书和私钥与 OpenSSL 一起使用