【问题标题】:Setting private key in certificate hangs windows service在证书中设置私钥会挂起 Windows 服务
【发布时间】:2017-06-09 17:49:48
【问题描述】:

我有应用程序,我必须使用需要来自提示窗口的密码的证书。

我有以下代码。

SecureString password = GetPassword();
X509Certificate2 certificate = GetCertificate();

var cspParameters = new CspParameters(1,
                                     "ProviderName",
                                     "KeyContainerName",
                                     null,
                                     password);

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

在控制台应用程序中一切正常,但是当我在 Windows 服务中运行该代码或从任务计划程序启动的控制台应用程序时,应用程序会在该行冻结。

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

没有例外,没有进展。

我正在使用与应用程序相同的凭据运行 Windows 服务。

Windows 10 / Windows Server 2012

你有什么想法吗?

【问题讨论】:

  • 您可以尝试将服务作为本地系统运行并启动Interactive Services Detection 服务(UI0Detect)。如果有一个 PIN 提示等待它应该带您到特殊桌面 0,您可以在其中输入 PIN。
  • 我试过了,但什么也没发生。下周我会再试一次。

标签: c# windows-services private-key x509certificate2


【解决方案1】:

好的,休息后我找到了解决办法。

我不得不在这一行周围添加模拟:

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

我使用了与我的服务中相同的凭据,并将 LogonType 设置为 Interactive。

【讨论】:

    【解决方案2】:

    问题是 PIN 提示出现在服务帐户的桌面上,不会向控制台用户公开(即使两者都在同一帐户下运行)。该服务不会挂起,它会等待 PIN 输入并且永远不会收到它。

    【讨论】:

    • 但在控制台应用程序中我可以替换私钥并且不会出现提示。在不替换私钥的情况下,我在控制台应用程序中有提示。
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 2011-11-09
    • 2021-03-24
    • 2013-07-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多