我想存储一个 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 中用于向服务商店添加证书的所有花哨工具都必须有目的。