1

以下のコードを使用して pfx ファイルをインストールしています (パスワードと certPath がメソッドに渡されます)。

X509Certificate2 cert = password != string.Empty ? new X509Certificate2(certPath, password) : new X509Certificate2(certPath);
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);   
store.Open(OpenFlags.ReadWrite);
store.Add(cert);
store.Close();

一部のマシンではこれが機能しますが、他の環境では毎回失敗します。例外はスローされませんが、mmc.exe をロードして証明書スナップインを追加すると、証明書が正しくインストールされていないようです。正しいストアの下に表示されますが、証明書を右クリックして [すべてのタスク] > [秘密鍵の管理] に移動すると、[オブジェクトが見つかりませんでした] というダイアログ ボックスが表示されます。イベント ビューアには何も記録されておらず、正しく実行されているように見えるコードをステップ実行しています。

FindPrivateKey.exe もキーの検索に失敗します。

この証明書が機能する環境と同一のように見える一部のマシンで、この証明書が実行されない原因は何ですか?

証明書スナップイン内からキーを削除して再インポートすると機能しますが、C# コードから確実に機能させるにはこれが必要です。


編集 - 失敗している証明書にはパスワードが含まれていることを追加する必要があります。これは、コードの最初の行が効果的であることを意味します。

X509Certificate2 cert = new X509Certificate2(certPath, password);
4

1 に答える 1

4

X509KeyStorageFlags を追加してみましたか?

new X509Certificate2(certPath, password, X509KeyStorageFlags.PersistKeySet);

編集: 質問に対する実際の回答は、次の KB 記事にあります: http://support.microsoft.com/kb/950090

X509Certificate または X509Certificate2 クラスを使用して証明書をインストールすると、デフォルトで X509Certificate/X509Certificate2 が一時コンテナーを作成して秘密鍵をインポートします。秘密鍵への参照がなくなると、秘密鍵は削除されます。

于 2013-04-29T11:13:59.523 に答える