控制台主机和Windows服务主机上的证书问题

时间:2014-07-21 04:15:12

标签: c# wcf windows-services wcf-security

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

证书已正确安装在客户端计算机上。我使用控制台主机(用于测试)和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服务使用此证书?

1 个答案:

答案 0 :(得分:1)

感谢所有关注的人。

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

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

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

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

  

X509KeyStorageFlags.MachineKeySet

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

我希望它有所帮助