【问题标题】:Access x509 certificates in windows service certificate stores with C#使用 C# 访问 Windows 服务证书存储中的 x509 证书
【发布时间】:2012-02-20 01:03:48
【问题描述】:

我想存储一个 x509 证书以供 Windows 服务使用。我遇到的问题是该证书的存储位置。似乎使用 microsoft 管理控制台 (mmc) 证书管理单元,您可以拥有 Windows 服务特定的证书存储。问题是我无法弄清楚如何通过 C# 获得这些证书。

  • 使用 mmc 和证书管理单元在服务存储下安装了证书。

使用topshelf 使用此代码创建并安装了一个 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 中用于向服务商店添加证书的所有花哨工具都必须有目的。

【问题讨论】:

    标签: c# security x509certificate2


    【解决方案1】:

    Windows 服务运行在与您运行 MMC 时不同的用户帐户下,这就是您在 CurrentUser 存储中看不到证书的原因;但可以在 LocalMachine 商店中看到它。

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

    【讨论】:

    • 谢谢,但我意识到这一点。基本的东西。我担心的是 MMC 在支持在 Windows 服务的上下文中添加证书方面付出了很大的努力。如何从服务中访问这些证书?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2011-11-09
    • 2016-03-13
    • 1970-01-01
    • 2020-01-24
    • 2016-06-03
    相关资源
    最近更新 更多