3

Windows サービスで使用する x509 証明書を保存したいと考えています。私が抱えている問題は、この証明書をどこに保存するかです。Windows サービス固有の証明書ストアを持つことができる Microsoft 管理コンソール (mmc) 証明書スナップインを使用しているようです。問題は、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 の優れたツールにはすべて、目的が必要です。

4

1 に答える 1

3

Windows サービスは、MMC を実行しているときとは異なるユーザー アカウントで実行されています。そのため、CurrentUser ストアに証明書が表示されません。ただし、LocalMachine ストアで確認してください。

これを解決する 1 つの方法は、「ServiceX」などの特定のユーザーとして Windows サービスを実行することです。次に、MMC を「ServiceX」として実行し、証明書を現在のユーザー ストアに追加します。

于 2012-01-26T23:11:58.750 に答える