2020. aasta novembri koondvärskenduse eeltutvustus Windows 10 versiooni 2004 ja uuemate versioonide jaoks ning 2021. aasta jaanuari turbe- ja kvaliteedivärskenduskomplekti väljalase .NET raamistik 4.8 jaoks andis välja muudatuse, et parandada X509Certificate2 sertide puhastusprotsessi. Allpool esitame täiendavaid selgitusi Windowsi privaatvõtme eluea kohta.

Kuna .NET raamistik 2.0 on PKCS#12 PFX-failist serdi ja sellega seotud privaatvõtme laadimiseks olnud kaks võimalust: ühe serdiobjektina klassi X509Certificate2 liikmete kaudu või kõigi PFX-is olevate sertidena X509Certificate2Collection.Import-meetodite kaudu.

Vaikekäitumine on see, et privaatvõti laaditakse püsivasse (nimega) võtmesse süsteemikrüptograafiateekide kaudu, mis kaudselt kirjutab faili kettale.  Enamik PFX-i laadivaid helistajaid kasutab serdiobjekti ajutiselt, nii et kui .NET vabastab serdiga seotud kohalikke ressursse, kustutab see ka privaatvõtme.  Selle käitumise peamised erandid on järgmised:

  1. Lipp X509KeyStorageFlags.PersistKeySet, mille tulemuseks on faili kirjutamine, kuid mitte kustutamine.

  2. Lipp X509KeyStorageFlags.EphemeralKetSet, mille tulemusena laaditakse privaatvõti ilma varundamisfailita mällu.

  3. Ebaharilik protsessi lõpetamine, mis võib tekkida võtme kustutamise ootel.

Vastuintuitiivselt on kaks erinevat viisi sertide laadimiseks alati kasutanud eri jälgimismehhanisme, kui on sobiv aeg privaatvõtme kustutamiseks.  Ühe serdi laadimisel klassi X509Certificate2 kaudu kasutatakse markerit, mis on nähtav ainult .NET-i käitusajale ja kehtib ainult sellele ühele objektiviitele.  PFX-i laadimine X509Certificate2Collectioni kaudu.Importimine kasutab kohaliku serdi objekti markerit, mille tulemusena jagatakse kustutamise aruandekohustus kõigi hallatavate objektidega, mis tähistavad sama omaserti.  See tähendab, et uus X509Certificate2(muuCert.Handle). Dispose() põhjustab privaatvõtmefaili kustutamise käsu Dispose() kutse ajal, kui teineCert laaditi PFX-ist X509Certificate2Collection.Import, kuid mitte siis, kui see laaditi PFX-ist X509Certificate2 klassi liikmete kaudu.  Mõned .NET-i osad loovad sisemiselt uusi hallatavaid X509Certificate2-objekte sisesertide pidemetest, nagu klass X509Chain ja X509Certificate2Collection.Find.  Raamistiku need osad ja mis tahes osad, mis neid otseselt või kaudselt kasutavad, võivad põhjustada enneaegseid võtmekustutusi, kuna loodavad objektid koguvad prügi.

.NET raamistik 4.8 algses väljaandes ilmnes viga, mille tulemuseks oli X509Certificate2Collection.Importimine ei rakenda kustutusmarkerit isegi siis, kui määratud pole kogumit PersistKeySet ega EphemeralKeySet. .NET andis 2021. aasta jaanuari turbe- ja kvaliteedivärskenduskomplektis selle vea jaoks välja paranduse, et vältida hüljatud privaatvõtmefailide tahtmatut kogunemist.  Selle paranduse poolt mõjutatud kutsujad saavad määrata lipu PersistKeySet, et naasta (tahtmatult erinev) .NET raamistik 4.8 RTM-i käitumist, kuigi see toob kaasa faili kogunemise, mis tuleb lahendada kohandatud puhastusloogikaga.

X509Certificate2Collection.Import on .NET Core For Windows ja .NET 5+ for Windows käitub samamoodi nagu .NET raamistik 2.0-4.7.2 (ja .NET raamistik 4.8 koos kõigi rakendatud värskendustega).  .NET-i meeskond kaalub .NET 6 (või tulevaste versioonide) täiustatud kujunduse kasutuselevõtmist, kuid see kujundusvärskendus ei kehti .NET raamistik, .NET Core'i ega .NET 5 kohta.

Kas vajate veel abi?

Kas soovite rohkem valikuvariante?

Siin saate tutvuda tellimusega kaasnevate eelistega, sirvida koolituskursusi, õppida seadet kaitsma ja teha veel palju muud.