Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 控制台主机和windows服务主机上的证书问题_C#_Wcf_Windows Services_Wcf Security - Fatal编程技术网

C# 控制台主机和windows服务主机上的证书问题

C# 控制台主机和windows服务主机上的证书问题,c#,wcf,windows-services,wcf-security,C#,Wcf,Windows Services,Wcf Security,我有一个wcf服务,它托管在windows服务和控制台主机上。 出于安全原因,我使用证书 证书已正确安装在客户端计算机上。我使用控制台主机(用于测试)和windows服务主机。当我启动控制台主机时,一切看起来都很好,我的服务正常 但是,当我使用windows服务时。当我想启动我的服务时,它会导致一个错误,并且不允许服务运行。这个错误是我已经修复过的。但是,毫无理由,它已经开始弹出相同的错误 错误消息: System.ArgumentException: It is likely that cer

我有一个wcf服务,它托管在windows服务和控制台主机上。 出于安全原因,我使用证书

证书已正确安装在客户端计算机上。我使用控制台主机(用于测试)和windows服务主机。当我启动控制台主机时,一切看起来都很好,我的服务正常

但是,当我使用windows服务时。当我想启动我的服务时,它会导致一个错误,并且不允许服务运行。这个错误是我已经修复过的。但是,毫无理由,它已经开始弹出相同的错误

错误消息:

System.ArgumentException: It is likely that certificate 'CN=CertificateName' may not have a private key that is capable of key exchange or the process may not have access rights for the private key. Please see inner exception for detail. ---> System.Security.Cryptography.CryptographicException: Keyset does not exist
问题是,这个证书在控制台主机应用程序中运行良好,但它不适用于windows服务


如何通过windows服务使用此证书?

感谢所有关注此问题的人

我设法找到了这个问题的解决办法。 在服务安装程序中,我为登录帐户选择了网络服务。所以,我需要做的只是给我的证书授予适当的权限,在我的情况下,它是网络服务帐户

您可以通过以下步骤分配权限:

打开mmc->添加/删除管理单元->证书->添加->在我的情况下本地计算机->证书所在的文件夹->右键单击证书->所有任务->管理私钥 ->以及其他权限分配步骤

编辑:如果使用X509Certificate2类将证书导入存储,您应该知道。如果您的情况与windows服务作为网络服务登录类似,请记住此标志

X509keystrageFlags.MachineKeySet

应设置为允许通过网络服务用户访问证书私钥


我希望它能有所帮助

我已经编辑了你的标题。请看“”,其中的共识是“不,他们不应该”。谢谢@JohnSaunders