Marraskuun 2020 kumulatiivisen päivityksen esiversio Windows 10 versiolle 2004 ja sitä uudempaan versioon sekä .NET Framework 4.8:n tammikuun 2021 suojaus- ja laatukoonnin julkaisu julkaisi muutoksen X509Certificate2 -varmenteiden puhdistusprosessin parantamiseksi. Alla annetaan lisäselvityksiä yksityisen avaimen käyttöiästä Windowsissa.
.NET Framework 2.0:sta lähtien varmenteen ja siihen liittyvän yksityisen avaimen voi ladata PKCS#12 PFX -tiedostosta kahdella eri tavalla: yhtenä varmenneobjektina X509Certificate2-luokan jäsenten kautta tai kaikkien PFX:ssä X509Certificate2Collection.Import-menetelmien kautta.
Oletustoiminto on, että yksityinen avain ladataan pysyväksi (nimetyksi) avaimeksi jonkin järjestelmän salauskirjaston kautta, joka epäsuorasti kirjoittaa tiedoston levylle. Useimmat PFX:ää lataavat soittajat käyttävät varmenneobjektia vain tilapäisesti, joten kun .NET julkaisee varmenteeseen liittyviä alkuperäisiä resursseja, se poistaa myös yksityisen avaimen. Tämän toiminnan pääasialliset poikkeukset ovat
-
X509KeyStorageFlags.PersistKeySet-merkintä, joka johtaa tiedoston kirjoittamiseen, mutta ei poistamiseen,
-
X509KeyStorageFlags.EphemeralKetSet-merkintä, jonka seurauksena yksityinen avain ladataan muistiin ilman taustatiedostoa.
-
Epänormaali prosessin päättäminen, joka voi tapahtua, kun avainten poistaminen odottaa.
Vasta-intuitiivisesti kaksi eri tapaa ladata varmenteita ovat aina käyttäneet erilaisia mekanismeja seurantaan, kun yksityisen avaimen poistaminen on sopiva aika. Yksittäisen varmenteen lataaminen X509Certificate2-luokan kautta käyttää merkkiä, joka näkyy vain .NET-suoritusaikaan ja koskee vain kyseistä yhtä objektiviittausta. PFX:n lataaminen X509Certificate2Collection.Importin kautta käyttää alkuperäisen varmenneobjektin merkkiä, jonka seurauksena poistovastuu jaetaan kaikkiin hallittuihin objekteihin, jotka edustavat samaa alkuperäistä varmennetta. Tämä tarkoittaa, että uusi X509Certificate2(otherCert.Handle). Dispose() aiheuttaa yksityisen avaimen tiedoston poistamisen Dispose() -kutsun aikana, jos muuCert ladattiin PFX-laitteesta X509Certificate2Collection.Import kautta, mutta ei, jos se ladattiin PFX:stä minkä tahansa X509Certificate2-luokan jäsenen kautta. Jotkin .NET:n osat luovat sisäisesti uusia hallittuja X509Certificate2-objekteja alkuperäisistä varmennekahvoista, kuten X509Chain-luokka ja X509Certificate2Collection.Find-menetelmä. Nämä kehyksen osat ja kaikki osat, jotka käyttävät niitä suoraan tai epäsuorasti, voivat johtaa ennenaikaisiin keskeisiin poistoihin, kun niiden luomat esineet kerätään.
.NET Framework 4.8:n ensimmäisessä julkaisussa ilmeni virhe, jonka seurauksena X509Certificate2Collection.Import ei ottanut poistomerkkiä käyttöön, vaikka PersistKeySet- tai EphemeralKeySet-asetuksia ei olisi määritetty. .NET julkaisi tämän virheen korjauksen tammikuun 2021 suojaus- ja laatukoonnissa estääkseen hylättyjen yksityisten avaintiedostojen tahattoman kertymisen. Soittajat, joihin tämä korjaus vaikuttaa, voivat määrittää PersistKeySet-merkinnän palatakseen (tahattomasti erilaiseen) .NET Framework 4.8 RTM -toimintaan, mutta tämä johtaa tiedostojen kertymiseen, joka on korjattava mukautetulla puhdistuslogiikalla.
X509Certificate2Collection.Import on .NET Core for Windows ja .NET 5+ for Windows toimii samalla tavalla kuin .NET Framework 2.0-4.7.2 (ja .NET Framework 4.8 ja kaikki päivitykset käytössä). .NET-tiimi harkitsee siirtymistä parannettuun rakenteeseen .NET 6:ssa (tai tulevissa versioissa), mutta tämä rakennepäivitys ei koske .NET Framework, .NET Corea tai .NET 5:tä.