L'anteprima dell'aggiornamento cumulativo di novembre 2020 per Windows 10 versione 2004 e successive, nonché il rilascio dell'aggiornamento cumulativo qualitativo e della sicurezza di gennaio 2021 per .NET Framework 4.8 ha rilasciato una modifica per migliorare il processo di pulizia per i certificati X509Certificate2. Di seguito vengono forniti ulteriori chiarimenti sulla durata di una chiave privata in Windows.

Da .NET Framework 2.0 esistono due modi diversi per caricare un certificato e la chiave privata associata da un file PKCS#12 PFX: come un unico oggetto certificato tramite i membri della classe X509Certificate2 o come tutti i certificati presenti in PFX tramite i metodi X509Certificate2Collection.Import.

Il comportamento predefinito prevede che la chiave privata venga caricata in una chiave permanente (denominata) tramite una delle librerie di crittografia di sistema, che scrive indirettamente un file su disco.  La maggior parte dei chiamanti che caricano un PFX usa l'oggetto certificato solo temporaneamente, quindi quando .NET rilascia le risorse native associate al certificato elimina anche la chiave privata.  Le principali eccezioni a questo comportamento sono:

  1. Il flag X509KeyStorageFlags.PersistKeySet, che causa la scrittura del file ma non l'eliminazione,

  2. Il flag X509KeyStorageFlags.EphemeralKetSet, che causa il caricamento della chiave privata in memoria senza file di backup,

  3. Terminazione anomala del processo, che può verificarsi quando l'eliminazione della chiave è in sospeso.

In modo controintuitivo, i due diversi modi per caricare i certificati hanno sempre utilizzato meccanismi diversi per il monitoraggio quando è il momento appropriato per eliminare la chiave privata.  Il caricamento di un singolo certificato tramite la classe X509Certificate2 usa un indicatore visibile solo al runtime .NET e si applica solo a quel riferimento all'oggetto.  Il caricamento di un PFX tramite X509Certificate2Collection.Import usa un indicatore sull'oggetto certificato nativo, il che comporta la condivisione della "responsabilità dell'eliminazione" tra tutti gli oggetti gestiti che rappresentano lo stesso certificato nativo.  Questo significa che il nuovo X509Certificate2(otherCert.Handle). Dispose() causerà la cancellazione del file di chiave privata durante la chiamata a Dispose() se otherCert è stato caricato da un PFX tramite X509Certificate2Collection.Import, ma non se è stato caricato da un PFX tramite qualsiasi membro della classe X509Certificate2.  Alcune parti di .NET creano internamente nuovi oggetti X509Certificate2 gestiti da handle di certificati nativi, ad esempio la classe X509Chain e il metodo X509Certificate2Collection.Find.  Queste parti del framework e tutte le parti che le usano direttamente o indirettamente possono causare la cancellazione prematura della chiave quando gli oggetti creati vengono raccolti dai garbage.

Nella versione iniziale di .NET Framework 4.8 è stato introdotto un bug che ha portato X509Certificate2Collection.Import a non applicare l'indicatore di eliminazione anche se non è stato specificato PersistKeySet né EphemeralKeySet. .NET ha rilasciato una correzione per questo bug nell'aggiornamento cumulativo qualitativo e della sicurezza di gennaio 2021 per prevenire l'accumulo accidentale di file chiave privati abbandonati.  I chiamanti interessati da questa correzione possono specificare il flag PersistKeySet per tornare al comportamento RTM (inavvertitamente diverso) di .NET Framework 4.8 RTM, anche se in questo modo si porrà un accumulo di file che deve essere affrontato con logica di pulizia personalizzata.

X509Certificate2Collection.Import su .NET Core per Windows e .NET 5+ per Windows si comporta allo stesso modo di .NET Framework 2.0-4.7.2 (e .NET Framework 4.8 con tutti gli aggiornamenti applicati).  Il team di .NET sta valutando la possibilità di passare a una progettazione migliorata in .NET 6 (o versioni future), ma questo aggiornamento della progettazione non sarà applicabile a .NET Framework, .NET Core o .NET 5.

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.