【问题标题】:Digital signature using Microsoft CryptoAPI from windows service?使用 Windows 服务中的 Microsoft CryptoAPI 进行数字签名?
【发布时间】:2015-10-07 12:45:20
【问题描述】:

是否可以从 Windows 服务进行数字签名? 适用于控制台应用程序的相同代码不适用于 Windows 服务

我在尝试数字签名时遇到以下错误:

System.InvalidOperationException:当前会话不是 交互的。在 System.Security.Cryptography.CAPI.CryptUIDlgSelectCertificateW(CRYPTUI_SELECTCERTIFICATE_STRUCTW csc) 在 System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromStore(SafeCertStoreHandle safeSourceStoreHandle,字符串标题,字符串消息,X509SelectionFlag selectionFlags, IntPtr hwndParent) 在 System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollectionHelper(X509Certificate2Collection 证书,字符串标题,字符串消息,X509SelectionFlag selectionFlag, IntPtr hwndParent) 在 System.Security.Cryptography.X509Certificates.X509Certificate2UI.SelectFromCollection(X509Certificate2Collection 证书,字符串标题,字符串消息,X509SelectionFlag 选择标志)

似乎 Windows 服务无法调用提供可供选择的证书列表或 PIN 窗口的 GUI? 服务作为本地系统运行,即管理员。我还添加了具有以下设置的 app.manifest:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

这个功能可以使用win服务吗?

【问题讨论】:

    标签: .net windows-services digital-signature smartcard cryptoapi


    【解决方案1】:

    您可能希望启用交互式服务检测(服务名称为 UI0Detect)。

    此服务将使您能够在特殊会话 0 中打开对话窗口。它从 Vista 开始工作。将弹出一个窗口,通知您(当前登录的用户)服务需要桌面交互(即输入 PIN 以访问私钥)。

    您可以阅读有关会话 0 和交互式服务检测的更多信息here

    【讨论】:

    • 嗯,我试试。我开始将 win 服务移植到无格式系统托盘应用程序。但是好奇模式开启了:)
    • 好吧,首先我在我的 Win10 blogs.technet.com/b/home_is_where_i_lay_my_head/archive/2012/10/… 中解决了这个问题,然后显示了消息,但是它挡住了我的键盘和鼠标,背景是空白的。也找不到证书,GUI显示没有找到证书。我认为我会放弃 WIn 服务开发,转而支持无形应用。
    • 我没有遇到任何问题。但当时是 Windows 2008,我们也放弃了会话 0 的概念,转而支持服务启动参数选项。
    【解决方案2】:

    您使用的方法会弹出一个对话框,让您查看和选择要使用的证书。服务通常不能有用户界面(因为它们在交互式用户会话之外运行)。我相信您可以拥有交互式服务,但在这种情况下我不会推荐它。使用另一种选择证书的方式,可能基于所需证书的指纹,例如How to get X509Certificate from certificate store and generate xml signature data?

    【讨论】:

    • 问题是用户需要选择证书并使用智能卡上的私钥对其进行签名。前面不知道会用到哪个证书。此外,当使用私钥签名时,还有一个窗口弹出对话框,提供密钥输入。
    • 将应用程序作为服务运行的动机是什么?
    • 它是 win 服务中的一个 HttpListener,它侦听本地主机特定端口并启用来自公共网站的个人电子 ID 的数字签名。
    • 那么在本地调用一个弹出对话框的方法听起来好像没什么意义。远程用户无论如何都看不到它。
    • 他当然会,因为他会先安装win服务,然后才能使用网站。它是特定的网站,它需要先决条件。这是概念证明omatpysakit.fi/tester/…bsi.bund.de/DE/Publikationen/TechnischeRichtlinien/tr03124/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多