Windows 10 バージョン 2004 以降の 2020 年 11 月の累積的な更新プログラム プレビューと、.NET Framework 4.8 の 2021 年 1 月のセキュリティおよび品質ロールアップ リリースは、X509Certificate2 証明書のクリーンアップ プロセスを改善するための変更をリリースしました。 以下では、Windows での秘密キーの有効期間に関する追加の説明を示します。

.NET Framework 2.0 以降、PKCS#12 PFX ファイルから証明書とその関連秘密キーを読み込む方法は 2 つあります。X509Certificate2 クラスのメンバーを介して 1 つの証明書オブジェクトとして、または X509Certificate2Collection.Import メソッドを介して PFX に存在するすべての証明書として。

既定の動作では、いずれかのシステム暗号化ライブラリを介して永続化された (名前付き) キーに秘密キーが読み込まれ、間接的にファイルがディスクに書き込まれます。  PFX を読み込むほとんどの呼び出し元は、証明書オブジェクトを一時的にしか使用しないため、.NET が証明書に関連付けられているネイティブ リソースを解放すると、秘密キーも削除されます。  この動作のメイン例外は次のとおりです。

  1. X509KeyStorageFlags.PersistKeySet フラグ。

  2. X509KeyStorageFlags.EphemeralKetSet フラグ。これにより、秘密キーがバッキング ファイルなしでメモリに読み込まれます。

  3. 異常なプロセスの終了。これは、キーの削除が保留中のときに発生する可能性があります。

直感的に、証明書を読み込む 2 つの異なる方法では、秘密キーを削除するのに適切なタイミングである場合の追跡には、常に異なるメカニズムが使用されています。  X509Certificate2 クラスを介して 1 つの証明書を読み込むと、.NET ランタイムにのみ表示され、その 1 つのオブジェクト参照にのみ適用されるマーカーが使用されます。  X509Certificate2Collection.Import を使用して PFX を読み込むと、ネイティブ証明書オブジェクトにマーカーが使用されるため、同じネイティブ証明書を表すマネージド オブジェクト間で "削除の説明責任" が共有されます。  これは、新しい X509Certificate2(otherCert.Handle) を意味します。Dispose() は、otherCertificate2Collection.Import 経由で PFX から otherCert が読み込まれた場合、Dispose() の呼び出し中に秘密キー ファイルが消去されますが、X509Certificate2 クラス メンバーを介して PFX から読み込まれた場合は消去されません。  .NET の一部の部分では、X509Chain クラスや X509Certificate2Collection.Find メソッドなど、ネイティブ証明書ハンドルから新しいマネージド X509Certificate2 オブジェクトが内部的に作成されます。  フレームワークのこれらの部分と、それらを直接または間接的に使用する部分は、作成するオブジェクトがガベージ コレクションされるため、キーの消去が早くなる可能性があります。

.NET Framework 4.8 の最初のリリースでバグが導入され、PersistKeySet も EphemeralKeySet も指定されていなくても、X509Certificate2Collection.Import で削除マーカーが適用されませんでした。 .NET では、 2021 年 1 月のセキュリティと品質のロールアップ でこのバグの修正プログラムをリリースし、破棄された秘密キー ファイルが意図せずに蓄積されるのを防ぎます。  この修正の影響を受ける呼び出し元は PersistKeySet フラグを指定して 4.8 RTM 動作.NET Framework (意図せず異なる) 動作に戻すことができますが、これを行うと、カスタム クリーンアップ ロジックで対処する必要があるファイルの蓄積が発生します。

X509Certificate2Collection.Import on .NET Core for Windows および .NET 5+ for Windows は、.NET Framework 2.0-4.7.2 (およびすべての更新プログラムが適用された .NET Framework 4.8) と同じように動作します。  .NET チームは、.NET 6 (または今後のバージョン) で改善された設計への移行を検討していますが、この設計更新プログラムは、.NET Framework、.NET Core、または .NET 5 には適用されません。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。