Partager via


Gestion d’un état de magasin de certificats

Plusieurs fonctions fournissent des services pour gérer l’état d’un magasin de certificats.

Pour accéder à des certificats, le magasin de certificats dans lequel ils sont stockés doit être ouvert via un appel à CertOpenStore ou CertOpenSystemStore.

En règle générale, un magasin de certificats est ouvert dans la mémoire mise en cache. Il peut s’agir d’un nouveau magasin ou de ses contenus qui peuvent être chargés à partir du registre local, du registre sur un ordinateur distant, d’un fichier de disque, d’un message PKCS #7 ou d’une autre source.

Les fonctions de magasin de certificats CryptoAPI permettent également à un magasin de conserver des certificats en dehors de la mémoire mise en cache dans, par exemple, une base de données externe de certificats, telle que celle fournie par la base de données du serveur de certificats Microsoft.

L’un des paramètres de la fonction CertOpenStore, lpszStoreProvider, détermine le type de magasin ouvert et le fournisseur utilisé pour ouvrir ce magasin. Pour obtenir des exemples d’ouverture de magasins de certificats via différents fournisseurs, veuillez consulter cet exemple de code C pour ouvrir des magasins de certificats.

CertCloseStore ferme un magasin de certificats. Lorsqu’un magasin de certificats est fermé, chacun des contextes de certificat de ce magasin voit son nombre de références réduit de un. La mémoire est libérée pour les certificats dont le nombre de références est égal à zéro.

Définir CERT_CLOSE_STORE_FORCE_FLAG avec CertCloseStore ferme le magasin de certificats et libère de la mémoire pour tous ses contextes de certificat, quel que soit le nombre de références. Dans certains cas, comme dans les programmes multithread, cela n'est pas souhaitable. Si CERT_CLOSE_STORE_CHECK_FLAG est définie, le magasin est fermé, mais une valeur d’avertissement est retournée par la fonction si la mémoire est toujours allouée pour les certificats dont le nombre de références n’a pas été réduit à zéro. Si le nombre de références d’un certificat est supérieur à zéro, un doublon de ce contexte de certificat n’a pas été libéré. Utilisez CertFreeCertificateContext, CertFreeCRLContext et CertFreeCTLContext pour libérer tous les certificats laissés ouverts.

Remarque

Un contexte de certificat est une structure de type CERT_CONTEXT qui a, entre autres membres, un pointeur vers l’objet BLOB de certificat encodé et un pointeur vers une structure CERT_INFO. La structure CERT_INFO contient les données de certificat les plus importantes. Pour obtenir plus d’informations sur les structures de contexte de certificats, de liste de révocation de certificats (CRL) et de liste de certificats de confiance (CTL), veuillez consulter la page Encodage et décodage d’un contexte de certificat.

Chaque contexte de certificat contient également un nombre de références indiquant le nombre de copies de l’adresse du contexte qui ont été affectées. Chaque fois qu’un contexte de certificat est dupliqué de quelque manière que ce soit, son nombre de références est incrémenté d’une unité. Chaque fois qu’un pointeur vers un contexte de certificat est libéré, le nombre de références dans le contexte de certificat est décrémenté d'une unité. Lorsque le nombre de références sur un contexte de certificat atteint zéro, la mémoire contenant le contexte est libérée. La mémoire allouée pour un contexte de certificat est également libérée lorsque ce contexte se trouve dans un magasin et que le magasin est fermé via CERT_CLOSE_STORE_FORCE_FLAG. Si la mémoire d’un contexte est libérée et que les pointeurs vers ce contexte sont toujours en cours d’utilisation, ces pointeurs ne sont plus valides.

 

CertDuplicateStore augmente le nombre de références sur le magasin.

CertSaveStore enregistre le contenu d’un magasin dans un fichier disque ou un emplacement de mémoire, et

CertControlStore gère un magasin lorsqu’il est ouvert. Une application avec un magasin ouvert peut être avertie lorsque l’état persistant de ce magasin a changé par un autre processus. Cela peut se produire si de nouveaux certificats ont été copiés dans le magasin d’ordinateurs local à partir d’un ordinateur de contrôle de domaine.

Lorsque des modifications sont découvertes, le magasin mis en cache peut resynchroniser son magasin mis en cache pour qu’il corresponde à l’état conservé du magasin. CertControlStore prend également en charge un processus qui copie les modifications du magasin mis en cache vers un stockage permanent lorsque ces modifications dans le magasin mis en cache ne sont pas enregistrées automatiquement.

Les contextes de certificat de type magasin de certificats peuvent avoir des propriétés étendues. CertSetStoreProperty ajoute des propriétés étendues à un magasin de certificats. CertGetStoreProperty récupère toutes les propriétés définies sur un magasin de certificats. Actuellement, la seule propriété de magasin de certificats prédéfinie est le nom localisé d’un magasin.