Condividi tramite


Gestione dello stato di un archivio certificati

Diverse funzioni forniscono servizi per la gestione di uno stato dell'archivio certificati.

Per ottenere l'accesso ai certificati, l'archivio certificati in cui sono archiviati deve essere aperto tramite una chiamata a CertOpenStore o CertOpenSystemStore.

In genere un archivio certificati viene aperto nella memoria memorizzata nella cache. Può essere un nuovo archivio o il relativo contenuto può essere caricato dal Registro di sistema locale, dal Registro di sistema in un computer remoto, da un file su disco, da un messaggio PKCS #7 o da un'altra origine.

Le funzioni dell'archivio certificati CryptoAPI consentono anche a un archivio di mantenere i certificati all'esterno della memoria memorizzata nella cache, ad esempio un database esterno di certificati, ad esempio quello fornito dal database del server di certificati Microsoft.

Uno dei parametri della funzione CertOpenStore , lpszStoreProvider, determina il tipo di archivio aperto e il provider usato per aprire tale archivio. Per esempi di apertura di archivi certificati con diversi provider, vedere Codice C di esempio per l'apertura di archivi certificati.

CertCloseStore chiude un archivio certificati. Quando un archivio certificati viene chiuso, ogni contesto del certificato in tale archivio ha il numero di riferimenti ridotto di uno. La memoria viene liberata per i certificati il cui conteggio dei riferimenti va a zero.

L'impostazione di CERT_CLOSE_STORE_FORCE_FLAG con CertCloseStore chiude l'archivio certificati e libera memoria per tutti i contesti di certificato indipendentemente dal conteggio dei riferimenti. In alcuni casi, ad esempio nei programmi multithreading, questo non può essere auspicabile. Se CERT_CLOSE_STORE_CHECK_FLAG è impostato, l'archivio viene chiuso, ma viene restituito un valore di avviso dalla funzione se la memoria è ancora allocata per i certificati i cui conteggi dei riferimenti non sono stati ridotti a zero. Se il numero di riferimenti di un certificato è maggiore di zero, non è stato liberato un duplicato del contesto del certificato. Usare CertFreeCertificateContext, CertFreeCRLContext e CertFreeCTLContext per liberare tutti i certificati lasciati aperti.

Nota

Un contesto di certificato è una struttura di tipo CERT_CONTEXT con, tra gli altri membri, un puntatore al BLOB del certificato codificato e un puntatore a una struttura CERT_INFO. La struttura CERT_INFO contiene i dati del certificato più significativi. Per altre informazioni su certificato, elenco di revoche di certificati (CRL) e strutture di contesto dell'elenco di certificati (CTL), vedere Codifica e decodifica di un contesto di certificato.

Ogni contesto del certificato contiene anche un conteggio dei riferimenti che indica il numero di copie dell'indirizzo del contesto assegnato. Ogni volta che un contesto di certificato viene duplicato in qualsiasi modo, il conteggio dei riferimenti viene incrementato di uno. Ogni volta che viene liberato un puntatore a un contesto di certificato, il conteggio dei riferimenti nel contesto del certificato viene decrementato di uno. Quando il conteggio dei riferimenti in un contesto di certificato raggiunge zero, la memoria che contiene il contesto viene deallocata. Anche la memoria allocata per un contesto di certificato viene deallocata quando tale contesto si trova in un archivio e l'archivio viene chiuso usando CERT_CLOSE_STORE_FORCE_FLAG. Se la memoria per un contesto viene deallocata e i puntatori a tale contesto sono ancora in uso, tali puntatori non sono più validi.

 

CertDuplicateStore aumenta il conteggio dei riferimenti nell'archivio.

CertSaveStore salva il contenuto di un archivio in un file su disco o in un percorso di memoria e

CertControlStore gestisce un archivio mentre è aperto. Un'applicazione con un archivio aperto può ricevere una notifica quando lo stato persistente di tale archivio è stato modificato da un altro processo. Questo problema può verificarsi se i nuovi certificati sono stati copiati nell'archivio computer locale da un computer di controllo di dominio.

Quando vengono individuate modifiche, l'archivio memorizzato nella cache può sincronizzare nuovamente l'archivio memorizzato nella cache in modo che corrisponda allo stato persistente dell'archivio. CertControlStore supporta anche un processo che copia le modifiche dell'archivio memorizzate nella cache nell'archiviazione permanente quando queste modifiche nell'archivio memorizzato nella cache non vengono salvate automaticamente.

I contesti di certificato simili all'archivio certificati possono avere proprietà estese. CertSetStoreProperty aggiunge proprietà estese a un archivio certificati. CertGetStoreProperty recupera tutte le proprietà impostate in un archivio certificati. Attualmente, l'unica proprietà predefinita dell'archivio certificati è il nome localizzato di un archivio.