Predogled zbirnih posodobitev za november 2020 za različico Windows 10 2004 in novejšo ter izdajo paketa posodobitev varnosti in kakovosti za ogrodje .NET Framework 4.8 iz januarja 2021 je izdal spremembo za izboljšanje postopka čiščenja za potrdila X509Certificate2. Spodaj so dodatna pojasnila glede življenjske dobe zasebnega ključa v sistemu Windows.
Ker je različica ogrodje .NET Framework 2.0, obstajata dva načina nalaganja potrdila in povezanega zasebnega ključa iz datoteke PKCS#12 PFX: kot en predmet potrdila prek članov v razredu X509Certificate2 ali kot vsa potrdila, prisotna v PFX prek metod X509Certificate2Collection.Import.
Privzeto se zasebni ključ naloži v ohranjen (imenovan) ključ prek ene od knjižnic za šifriranje sistema, ki posredno zapiše datoteko na disk. Večina klicateljev, ki nalagajo pfx, predmet potrdila uporabi le začasno, tako da ko .NET izda izvorne vire, povezane s potrdilom, izbriše tudi zasebni ključ. Glavne izjeme tega delovanja so:
-
Zastavica X509KeyStorageFlags.PersistKeySet, zaradi katere je datoteka zapisana, vendar ni izbrisana,
-
Zastavica X509KeyStorageFlags.EphemeralKetSet, ki povzroči, da se zasebni ključ naloži v pomnilnik brez datoteke za varnostno kopiranje,
-
Neobičajno prenehanje postopka, do katerega lahko pride, ko je brisanje ključa v čakanju.
Nasprotno, dva različna načina nalaganja potrdil vedno uporabljata različne mehanizme za sledenje, ko je primeren čas za brisanje zasebnega ključa. Pri nalaganju enega potrdila prek razreda X509Certificate2 je uporabljena oznaka, ki je vidna le izvajalnik .NET in velja le za ta sklic na en predmet. Nalaganje PFX-ja prek X509Certificate2Collection.Import uporablja oznako na izvornem predmetu potrdila, kar povzroči, da je »odgovornost brisanja« v skupni rabi v vseh upravljanih predmetih, ki predstavljajo isto izvorno potrdilo. To pomeni, da novi X509Certificate2(otherCert.Handle). Možnost Dispose() bo povzročila brisanje datoteke zasebnega ključa med klicem na stran Dispose(), če je bil drugiCert naložen iz PFX prek X509Certificate2Collection.Import, vendar ne, če je bil naložen iz PFX prek katerega koli razreda X509Certificate2. Nekateri deli ogrodja .NET interno ustvarijo nove upravljane predmete X509Certificate2 iz ročic za izvorno potrdilo, kot sta razred X509Chain in metoda X509Certificate2Collection.Find. Ti deli ogrodja in vsi deli, ki jih neposredno ali posredno uporabljajo, lahko privedejo do predčasne izbrisa ključa, saj predmeti, ki jih ustvarijo, zbirajo smeti.
Napaka je bila uvedena v začetni izdaji programa ogrodje .NET Framework 4.8, kar je povzročilo X509Certificate2Collection.Import, da ne uporabi oznake izbrisa, tudi če nista bili določeni niti persistKeySet niti EphemeralKeySet. .NET je izdal popravek za to napako v paketu varnostnih posodobitev in posodobitev kakovosti iz januarja 2021 , da bi preprečil nenamerno zbiranje zapuščenih datotek z zasebnimi ključi. Klicatelji, na katere vpliva ta popravek, lahko določijo zastavico PersistKeySet, da se vrnejo na (nenamerno drugačno) vedenje RTM v sistemu ogrodje .NET Framework 4,8, vendar bo to vrnilo zbiranje datotek, ki ga je treba obravnavati z logiko čiščenja po meri.
X509Certificate2Collection.Import v .NET Core za Windows in .NET 5+ za Windows deluje na enak način kot ogrodje .NET Framework 2.0-4.7.2 (in ogrodje .NET Framework 4.8 z vsemi uporabljenimi posodobitvami). Ekipa .NET razmišlja o uporabi izboljšanega načrta v ogrodju .NET 6 (ali prihodnjih različicah), vendar ta posodobitev načrta ne bo veljala za ogrodje .NET Framework, .NET Core ali .NET 5.