在证书中设置私钥会挂起Windows服务

时间:2017-01-24 18:39:32

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

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

我有以下代码。

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

你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

好的,休息一下后我找到了解决方案。

我不得不围绕这一行添加模仿:

certificate.PrivateKey = new RSACryptoServiceProvider(cspParameters);

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

答案 1 :(得分:0)

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