2020. gada novembra 2020. gada kumulatīvā atjauninājuma priekšskatījums operētājsistēmai Windows 10 versijai 2004 un tālāk, kā arī 2021. gada janvāra drošības un kvalitātes apkopojuma laidienā operētājsistēmai .NET Framework 4.8 tika izlaistas izmaiņas, lai uzlabotu X509Certificate2 sertifikātu tīrīšanas procesu. Tālāk sniegtas papildu skaidrojumus par privāto atslēgu darbības laiku sistēmā Windows.

Tā kā .NET Framework 2,0 ir divi veidi, kā ielādēt sertifikātu un ar to saistīto privāto atslēgu no PKCS#12 PFX faila: kā viens sertifikāta objekts, izmantojot dalībniekus X509Certificate2 klasē vai kā visus PFX sertifikātus, izmantojot X509Certificate2Collection.Import metodes.

Noklusējuma darbība ir tā, ka privātā atslēga tiek ielādēta saglabātā (nosauktā) atslēgā, izmantojot kādu no sistēmas šifrēšanas bibliotēkām, kas netieši ieraksta failu diskā.  Lielākā daļa zvanītāju, kuri ielādē PFX, tikai īslaicīgi izmanto sertifikāta objektu, 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

  1. Karodziņš X509KeyStorageFlags.PersistKeySet, kura rezultātā fails tiek rakstīts, bet netiek izdzēsts,

  2. Karodziņš X509KeyStorageFlags.EpirieralKetSet, kura rezultātā privātā atslēga tiek ielādēta atmiņā bez faila, kas tiek dublēta.

  3. Anormāla procesa izbeigšana, kas var rasties, ja tiek gaidīta atslēgas dzēšana.

Pretēji, divi dažādi sertifikātu ielādes veidi vienmēr izmanto citus mehānismus, lai izsekotu, kad ir piemērots laiks privātās atslēgas dzēšanai.  Ielādējot vienu sertifikātu, izmantojot X509Certificate2 klasi, tiek izmantots marķieris, kas ir redzams tikai .NET runtime un attiecas tikai uz vienu objekta atsauci.  Ielādējot PFX, izmantojot X509Certificate2Collection.Import izmanto marķieri vietējā sertifikāta objektā, tāpēc visos pārvaldītajos objektos, kuri pārstāv to pašu vietējo sertifikātu, tiek kopīgota "dzēšanas atbildība".  Tas nozīmē, ka jaunais X509Certificate2(otherCert.Handle). Noķeršanās() izraisīs privātās atslēgas faila izdzēšanu zvana laikā, lai atbrīvotos(), ja no PFX tika ielādēts citsCert, izmantojot X509Certificate2Collection.Import, bet ne, ja tas tika ielādēts no PFX, izmantojot jebkuruS X509Certificate2 klases dalībniekus.  Dažas .NET daļas iekšēji izveido jaunus pārvaldītus X509Certificate2 objektus no vietējiem sertifikātu turiem, piemēram, X509Chain klasi un X509Certificate2Collection.Find metodi.  Šīs struktūras daļas un daļas, kas tās tieši vai netieši izmanto, var izraisīt atslēgas dzēšanu, jo izveidotie objekti iegūst atkritumu apkopošanu.

Sākotnējā .NET Framework 4.8 laidienā tika ieviesta kļūda, kā rezultātā tika norādīts X509Certificate2Collection.Import, lai nerādītu dzēšanas marķieri pat tad, ja nav norādīts persistKeySet un EpmaceralKeySet. .NET izlaida šīs kļūdas labojumu 2021 . gada janvāra drošības un kvalitātes apkopojumā, lai novērstu netīšo pamesto privāto atslēgu failu apkopojumu.  Zvanītāji, kurus ietekmē šis labojums, var norādīt karodziņu PersistKeySet, lai atgrieztos (nejauši citā) .NET Framework 4.8 RTM uzvedību, taču šādi tiks iegūts failu uzkrājums, kas ir jāizskata, izmantojot pielāgotu tīrīšanas loģiku.

X509Certificate2Collection.Import on .NET Core for Windows un .NET 5+ for Windows darbojas tāpat kā .NET Framework 2.0-4.7.2 (un .NET Framework 4.8 ar visiem lietotajiem atjauninājumiem).  .NET komanda apsver iespēju pāriet uz uzlabotu noformējumu programmā .NET 6 (vai nākamajās versijās), bet šis noformējuma atjauninājums neattiecas uz .NET Framework, .NET Core vai .NET 5.

Nepieciešama papildu palīdzība?

Vēlaties vairāk opciju?

Izpētiet abonementa priekšrocības, pārlūkojiet apmācības kursus, uzziniet, kā aizsargāt ierīci un veikt citas darbības.