2012-01-26 16 views
3

Windowsサービスで使用するx509証明書を保存します。私が抱えている問題は、この証明書をどこに保管するかということです。 Windowsサービス固有の証明書ストアを持つことができるMicrosoft管理コンソール(mmc)証明書スナップインを使用しているようです。問題は、C#経由でこれらの証明書を取得する方法を理解できないことです。Windowsサービス証明書ストアのx509証明書に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でのすてきなツールはすべて目的を持っていなければなりません。

答えて

3

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

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

+1

ありがとうございますが、これを実現しています。基本的なもの。私が心配しているのは、MMCがWindowsサービスのコンテキストで証明書を追加することをサポートすることに大きな苦労していることです。サービスからこれらの証明書にアクセスするにはどうすればよいですか? – KevM

関連する問題