3

通常はローカルシステムアカウントを使用して実行されるWindowsサービスがあります(ただし、一部のインストールでは、特定のユーザーアカウントとして実行される場合があります)。

このサービスはWCFを使用しており、通信はX509証明書を使用して保護されています。

私の質問は、証明書(および秘密鍵)を保存するのに最適な場所はどこですか?

証明書ストアを使用することが最善のアプローチである場合、管理者とサービスのみが秘密鍵にアクセスできるようにするために、どちらを使用する必要がありますか?

または、単純なオプションは、両方をPFXファイルとしてディスクに保存し、ACLを使用して、管理者とサービスのみがアクセスできるようにすることです。このアプローチと証明書ストアの使用の長所と短所は何ですか?

編集 明確にするために、私は.NET Framework 3.5でC#を使用しています

4

1 に答える 1

2

まず、秘密鍵をエクスポート不可として保存した証明書ストアに証明書を保持することをお勧めします。今いくつかの議論。

プライベート シークレットまたはその他のプライベート情報をマシンに保存するには、さまざまな方法があります。最も古い方法はAPI です ( http://msdn.microsoft.com/en-us/library/ms721818%28VS.85%29.aspxLsaStorePrivateDataを参照)。シークレットの数には制限がありますが、すべてのシークレットはローカル、グローバル、およびマシンに分割できます。LsaRetrievePrivateData

次の方法は、DPAPI を使用することです ( http://msdn.microsoft.com/en-us/library/ms995355.aspxを参照) 。CryptProtectDataCryptUnprotectData

考えられるさまざまな方法を比較して、自分の方法が自分のタスクに最適であることを確認したいので、この 2 つの方法への参照を追加します。

あなたが尋ねるべき最も重要な質問は、私の秘密鍵を保護する最善の方法はどれかということだと思います。コピーされるキーを保護する方法を選択する必要があると思います。したがって、証明書ストアを使用することをお勧めします。証明書ストアでは、エクスポート不可とマークされた秘密鍵を保持できます。これが私の意見では主な利点です。さまざまな方法で、対応する秘密鍵を使用して証明書を展開できます。マシンに保存された秘密鍵がエクスポート可能としてマークされていないことを確認してください。

ディスク上の PFX ファイルを使用しても、この利点は得られません。さらに、PFX が暗号化されていないか、パスワードを PFX ファイルに保存する必要があるという問題が発生します。したがって、DPAPI (CryptProtectDataおよびCryptUnprotectData) または LSA API (LsaStorePrivateDataおよびLsaRetrievePrivateData) を使用する必要があり、パスワードをエクスポートできます。

于 2010-05-06T21:18:52.703 に答える