集合存储

随着证书的数量增加,证书吊销列表(CRL)和 证书信任列表(CCL)的增长,这些证书的组织就会成为问题。 一种可能的解决方案是创建单独的证书存储来保留不同类型的证书。 此解决方案会创建新问题,因为应用程序可能需要搜索多个不同的存储来查找特定的证书。 逻辑存储或集合存储的使用可解决此问题。

逻辑存储 和集合证书存储是一组物理存储,这些存储显示为单个存储的应用程序。 可以使用单个函数调用 CertFindCertificateInStoreCertEnumCertificatesInStore来搜索或枚举逻辑或集合存储的所有成员存储。

逻辑存储或集合存储的使用也提供了难以通过纸张记录实现的灵活性。 单个物理存储中的证书可能需要是多个不同逻辑组的成员。 因此,单个物理存储可以是多个逻辑存储或集合存储的成员,如下图所示。

集合存储

此图显示了以下基本逻辑证书存储概念:

  • 集合证书存储具有指向该集合存储的第一个指针块的指针。
  • 集合存储的每个指针块都有指向同级存储的指针,以及指向集合的下一个指针块的指针。
  • 集合中的每个同级存储都是一个简单的物理证书存储。
  • 简单的证书存储可以是许多不同的集合存储中的成员同级存储。
  • 添加到集合存储的证书在物理上添加到集合中的同级存储区之一。
  • 同级存储区中的证书可由其同级存储所属的任何集合存储访问。

集合存储是通过使用 CertOpenStore,然后使用 CertAddStoreToCollection 将打开的同级存储添加到集合存储,从而在应用程序中生成集合存储。 可以通过调用 CertRemoveStoreFromCollection从集合存储中删除同级存储。