Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.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# 使用C访问windows服务证书存储中的x509证书#_C#_Security_X509certificate2 - Fatal编程技术网

C# 使用C访问windows服务证书存储中的x509证书#

C# 使用C访问windows服务证书存储中的x509证书#,c#,security,x509certificate2,C#,Security,X509certificate2,我想存储一个x509证书供windows服务使用。我遇到的问题是在哪里存储此证书。使用microsoft管理控制台(mmc)证书管理单元,您似乎可以拥有windows服务特定的证书存储。问题是我不知道如何通过C#获取这些证书 使用mmc和证书管理单元在服务存储下安装了证书 使用以下代码创建并安装了windows服务: var localStore = new X509Store(StoreLocation.LocalMachine); localStore.Open(OpenFlags.R

我想存储一个x509证书供windows服务使用。我遇到的问题是在哪里存储此证书。使用microsoft管理控制台(mmc)证书管理单元,您似乎可以拥有windows服务特定的证书存储。问题是我不知道如何通过C#获取这些证书

  • 使用mmc和证书管理单元在服务存储下安装了证书
使用以下代码创建并安装了windows服务:

var localStore = new X509Store(StoreLocation.LocalMachine); 
localStore.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 c in localStore.Certificates)
{
    _log.Debug("local: certificate for {0} - has private key {1}".ToFormat(c.SubjectName.Name, c.HasPrivateKey));
}

var userStore = new X509Store(StoreLocation.CurrentUser); 
userStore.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 c in userStore.Certificates)
{
    _log.Debug("user: certificate for {0} - has private key {1}".ToFormat(c.SubjectName.Name, c.HasPrivateKey));
}
我从未在windows服务的存储中看到该证书。如果我将证书添加到本地计算机证书存储中,Windows服务确实会看到该证书


mmc中所有向服务商店添加证书的花式工具都有其用途

windows服务使用与运行MMC时不同的用户帐户运行,这就是为什么您在CurrentUser存储中看不到证书的原因;但请务必在LocalMachine商店中看到它


解决这个问题的一种方法是让windows服务作为特定用户运行,比如“ServiceX”。然后将MMC作为“ServiceX”运行,并将证书添加到当前用户存储中。

谢谢,但我意识到了这一点。基本的东西。我关心的是,MMC在支持在Windows服务的上下文中添加证书方面付出了巨大的努力。如何从该服务访问这些证书?