Den kumulative oppdateringen for november 2020 for Windows 10 versjon 2004 og under, i tillegg til utgivelsen for samlet sikkerhets- og kvalitetsoppdatering for januar 2021 for .NET Framework 4.8, lanserte en endring for å forbedre oppryddingsprosessen for X509Certificate2-sertifikater. Nedenfor gir vi ytterligere avklaringer om en privat nøkkellevetid på Windows.

Siden .NET Framework 2.0 har det vært to forskjellige måter å laste inn et sertifikat og den tilknyttede private nøkkelen på fra en PKCS#12 PFX-fil: som ett sertifikatobjekt via medlemmer i X509Certificate2-klassen eller som alle sertifikatene som finnes i PFX via X509Certificate2Collection.Import-metodene.

Standardvirkemåten er at den private nøkkelen lastes inn i en fast (navngitt) nøkkel via ett av systemkryptografibibliotekene, som indirekte skriver en fil på disken.  De fleste innringere som laster inn pfx, bruker bare sertifikatobjektet midlertidig, så når .NET frigir de opprinnelige ressursene som er knyttet til sertifikatet, slettes også den private nøkkelen.  De viktigste unntakene for denne virkemåten er

  1. X509KeyStorageFlags.PersistKeySet-flagget, som resulterer i at filen skrives, men ikke slettes,

  2. X509KeyStorageFlags.EphemeralKetSet-flagget, som resulterer i at den private nøkkelen lastes inn i minnet uten støttefil,

  3. Unormal prosessavslutning, som kan oppstå når nøkkelsletting venter.

Kontraintuitivt har de to forskjellige måtene å laste inn sertifikater på alltid brukt forskjellige mekanismer for sporing når det er et passende tidspunkt å slette den private nøkkelen.  Innlasting av ett enkelt sertifikat via X509Certificate2-klassen bruker en indikator som bare er synlig for .NET-kjøretiden, og gjelder bare for den ene objektreferansen.  Innlasting av pfx via X509Certificate2Collection.Import bruker en indikator på det opprinnelige sertifikatobjektet, noe som resulterer i at slettingsansvar deles på tvers av alle administrerte objekter som representerer det samme opprinnelige sertifikatet.  Dette betyr at nye X509Certificate2(otherCert.Handle). Dispose() vil føre til at den private nøkkelfilen slettes under kallet til Dispose() hvis otherCert ble lastet inn fra en PFX via X509Certificate2Collection.Import, men ikke hvis den ble lastet inn fra en PFX via X509Certificate2-klassemedlemmer.  Noen deler av .NET oppretter internt nye administrerte X509Certificate2-objekter fra opprinnelige sertifikathåndtak, for eksempel X509Chain-klassen og metoden X509Certificate2Collection.Find.  Disse delene av rammeverket, og eventuelle deler som direkte eller indirekte bruker dem, kan resultere i for tidlig nøkkelsempning når objektene de lager får søppel samlet inn.

En feil ble innført i den første versjonen av .NET Framework 4.8, noe som resulterte i at X509Certificate2Collection.Import ikke brukte indikatoren for sletting, selv om verken PersistKeySet eller EphemeralKeySet ble angitt. .NET lanserte en løsning for denne feilen i sikkerhets- og kvalitetsoppdatering for januar 2021 for å hindre utilsiktet akkumulering av forlatte private nøkkelfiler.  Innringere som påvirkes av denne løsningen, kan angi PersistKeySet-flagget for å gå tilbake til (utilsiktet forskjellig) .NET Framework 4,8 RTM-virkemåte, men dette vil resultere i filakkumulering som må håndteres med egendefinert oppryddingslogikk.

X509Certificate2Collection.Import på .NET Core for Windows og .NET 5+ for Windows fungerer på samme måte som .NET Framework 2.0-4.7.2 (og .NET Framework 4.8 med alle oppdateringer i bruk).  .NET-teamet vurderer å gå over til en forbedret utforming i .NET 6 (eller fremtidige versjoner), men denne utformingsoppdateringen gjelder ikke for .NET Framework, .NET Core eller .NET 5.

Trenger du mer hjelp?

Vil du ha flere alternativer?

Utforsk abonnementsfordeler, bla gjennom opplæringskurs, finn ut hvordan du sikrer enheten og mer.