Ukážka kumulatívnej aktualizácie z novembra 2020 pre Windows 10 verziu 2004 a novšiu, ako aj vydanie súhrnnej aktualizácie zabezpečenia a kvality z januára 2021 pre .NET Framework 4.8 vydala zmenu na zlepšenie procesu čistenia certifikátov X509Certificate2. Nižšie uvádzame ďalšie informácie o životnosti súkromných kľúčov vo Windowse.

Keďže .NET Framework 2.0 existujú dva rôzne spôsoby načítania certifikátu a jeho priradeného súkromného kľúča zo súboru PFX PKCS#12: ako jeden objekt certifikátu prostredníctvom členov triedy X509Certificate2 alebo ako všetky certifikáty prítomné v PFX prostredníctvom metód X509Certificate2Collection.Import.

Predvoleným správaním je, že súkromný kľúč sa načíta do trvalého (pomenovaného) kľúča prostredníctvom niektorej zo systémových knižníc kryptografie, ktorá nepriamo zapíše súbor na disk.  Väčšina volajúcich načítavajúcich PFX používa objekt certifikátu iba dočasne, takže keď .NET vydáva natívne zdroje priradené k certifikátu, odstráni aj súkromný kľúč.  Hlavnými výnimkami tohto správania sú

  1. Príznak X509KeyStorageFlags.PersistKeySet, ktorého výsledkom je, že súbor sa zapíše, ale neodstráni.

  2. Príznak X509KeyStorageFlags.EphemeralKetSet, čo má za následok, že súkromný kľúč sa načíta do pamäte bez zálohového súboru.

  3. Nezvyčajné ukončenie procesu, ktoré sa môže vyskytnúť, keď čaká na odstránenie kľúča.

Neintuitívne platí, že dva rôzne spôsoby načítania certifikátov vždy používali rôzne mechanizmy sledovania, keď je vhodný čas na odstránenie súkromného kľúča.  Načítanie jedného certifikátu prostredníctvom triedy X509Certificate2 používa značku, ktorá je viditeľná len pre modul .NET runtime a vzťahuje sa len na tento odkaz na jeden objekt.  Načítanie PFX cez X509Certificate2Collection.Import používa značku na natívnom objekte certifikátu, čo má za následok zdieľanie zodpovednosti za odstránenie v rámci všetkých spravovaných objektov, ktoré predstavujú rovnaký natívny certifikát.  To znamená, že nový X509Certificate2 (otherCert.Handle). Dispose() spôsobí, že súbor súkromného kľúča sa vymaže počas volania na Dispose(), ak bol súbor otherCert načítaný z PFX cez X509Certificate2Collection.Import, ale nie v prípade, že bol načítaný z PFX prostredníctvom ľubovoľných členov triedy X509Certificate2.  Niektoré časti rozhrania .NET interne vytvárajú nové spravované objekty X509Certificate2 z natívnych popisovačov certifikátov, ako je napríklad trieda X509Chain a metóda X509Certificate2Collection.Find.  Tieto časti rámca, a všetky časti, ktoré priamo alebo nepriamo používajú, môže mať za následok predčasné vymazanie kľúča ako objekty, ktoré vytvárajú dostať odpadky zbierať.

V počiatočnom vydaní verzie .NET Framework 4.8 sa vyskytla chyba, ktorá viedla k tomu, že funkcia X509Certificate2Collection.Import nepoužila značku odstránenia, a to ani v prípade, že nebola zadaná značka PersistKeySet ani EphemeralKeySet. Rozhranie .NET vydalo opravu tejto chyby v súhrnnej aktualizácii zabezpečenia a kvality z januára 2021, aby sa zabránilo neúmyselnej akumulácii opustených súborov súkromných kľúčov.  Volajúci ovplyvnení touto opravou môžu určiť príznak PersistKeySet, ktorý sa má vrátiť k (neúmyselne odlišnému) správaniu .NET Framework 4,8 RTM, aj keď to bude mať za následok akumuláciu súboru, ktorú je potrebné riešiť s vlastnou logikou čistenia.

X509Certificate2Collection.Import v .NET Core pre Windows a .NET 5+ pre Windows sa správa rovnako ako .NET Framework 2.0-4.7.2 (a .NET Framework 4.8 s použitými všetkými aktualizáciami).  Tím .NET zvažuje prechod na vylepšený návrh v rozhraní .NET 6 (alebo v budúcich verziách), ale táto aktualizácia návrhu sa nebude vzťahovať na .NET Framework, .NET Core alebo .NET 5.

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.