2020. gada novembra kumulatīvā atjauninājuma priekšskatījums Windows 10 versijai 2004 un vecākām versijām, kā arī 2021. gada janvāra drošības un kvalitātes apkopojuma laidiens .NET Framework 4.8 izlaida izmaiņas, lai uzlabotu X509Certificate2 sertifikātu tīrīšanas procesu. Tālāk ir sniegti papildu skaidrojumi par privātās atslēgas darbības laiku operētājsistēmā Windows.
Kopš .NET Framework 2.0 ir bijuši divi dažādi veidi, kā ielādēt sertifikātu un ar to saistīto privāto atslēgu no PKCS#12 PFX faila: kā vienu sertifikāta objektu, izmantojot X509Certificate2 klases dalībniekus, vai kā visus PFX esošos sertifikātus, izmantojot X509Certificate2Collection.Import metodes.
Noklusējuma darbība ir tāda, ka privātā atslēga tiek ielādēta pastāvīgā (nosauktajā) atslēgā, izmantojot kādu no sistēmas kriptogrāfijas bibliotēkām, kas netieši raksta failu diskā. Lielākā daļa zvanītāju, kas ielādē PFX, sertifikāta objektu izmanto tikai īslaicīgi, tāpēc, kad .NET izlaiž ar sertifikātu saistītos vietējos resursus, tiek izdzēsta arī privātā atslēga. Galvenie šīs darbības izņēmumi ir
- Karodziņš X509KeyStorageFlags.PersistKeySet — kā rezultātā fails tiek ierakstīts, bet ne dzēsts,
- karodziņš X509KeyStorageFlags.EphemeralKetSet, kā rezultātā privātā atslēga tiek ielādēta atmiņā bez dublējuma faila,
- Anormāla procesa izbeigšana, kas var rasties, ja nav pabeigta atslēgas dzēšana.
Pretēji intuitīvajai situācijai, divi dažādi veidi, kā ielādēt sertifikātus, vienmēr ir izmantojuši atšķirīgus mehānismus, lai izsekotu, kad ir piemērots laiks dzēst privāto atslēgu. Ielādējot vienu sertifikātu, izmantojot klasi X509Certificate2, tiek izmantots marķieris, kas ir redzams tikai .NET izpildlaikam un attiecas tikai uz šī viena objekta atsauci. PFX ielāde, izmantojot X509Certificate2Collection.Import, izmanto marķieri uz vietējā sertifikāta objekta, kā rezultātā "dzēšanas atbildība" tiek koplietota visos pārvaldītajos objektos, kas pārstāv to pašu vietējo sertifikātu. Tas nozīmē, ka jaunais X509Certificate2(otherCert.Handle). Dispose() izraisīs privātās atslēgas faila izdzēšanu zvana laikā uz Dispose(), ja otherCert tika ielādēts no PFX, izmantojot X509Certificate2Collection.Import, bet ne tad, ja tas tika ielādēts no PFX, izmantojot jebkuru X509Certificate2 klases dalībnieku. Dažas .NET versijas iekšēji izveido jaunus pārvaldītus X509Certificate2 objektus no vietējiem sertifikātu turiem, piemēram, X509Chain klases un X509Certificate2Collection.Find metodes. Šīs platformas daļas un jebkuras daļas, kas tās tieši vai netieši izmanto, var izraisīt priekšlaicīgu atslēgu dzēšanu, jo to radītie objekti tiek savākti atkritumos.
.NET Framework 4.8 sākotnējā laidienā tika ieviesta kļūda, kuras rezultātā X509Certificate2Collection.Import nelietoja dzēšanas marķieri pat tad, ja netika norādīts ne PersistKeySet, ne EphemeralKeySet. .NET izlaida šīs kļūdas labojumu 2021. gada janvāra drošības un kvalitātes apkopojumā , lai novērstu nejaušu pamestu privātās atslēgas failu uzkrāšanos. Izsaucēji, kurus ietekmē šis labojums, var norādīt PersistKeySet karodziņu, lai atgrieztos pie (netīši atšķirīgas) .NET Framework 4.8 RTM uzvedības, taču tas izraisīs failu uzkrāšanos, kas ir jārisina, izmantojot pielāgotu tīrīšanas loģiku.
X509Certificate2Collection.Import .NET Core operētājsistēmai Windows un .NET 5+ operētājsistēmai Windows darbojas tāpat kā .NET Framework 2.0-4.7.2 (un .NET Framework 4.8 ar visiem atjauninājumiem). .NET komanda apsver iespēju pāriet uz uzlabotu noformējumu .NET 6 (vai turpmākajās versijās), bet šis noformējuma atjauninājums netiks lietots ..NET Framework, .NET Core un .NET 5.