使用证书存储管理证书

在一段时间内, 证书 将在用户计算机上累积。 管理这些证书需要工具。 CryptoAPI 提供这些工具作为存储、检索、删除、列出 (枚举) 以及验证证书的功能。 CryptoAPI 还提供将证书附加到消息的方法。

CryptoAPI 提供了两个用于管理证书main类别的函数:管理证书存储的函数和用于证书的函数、证书吊销列表 (CRL) ,以及证书信任列表 (CTL) 在这些存储区中。

管理 证书存储的 函数包括用于处理逻辑或 虚拟存储远程存储外部存储以及可重定位的存储的函数。

证书、 CRLCTL 可以在 证书存储中保留和维护。 可以从存储中检索它们,这些存储已保留以用于身份验证过程。

证书存储是所有证书功能的核心。 证书使用带有“Cert”前缀的函数在存储中管理。 典型的证书存储是 证书 的链接列表,如下图所示。

证书存储

上图显示了:

  • 每个 证书存储 都有一个指向该存储中的第一个证书块的指针。
  • 证书块包括指向该证书数据的指针和指向存储中下一个证书块的“下一步”指针。
  • 最后一个证书块中的“下一个”指针设置为 NULL
  • 证书的数据块包含只读证书上下文和证书的任何扩展属性。
  • 每个证书的数据块都包含 一个引用计数 ,用于跟踪指向现有证书的指针数。

证书存储中的证书通常保存在某种永久存储中,例如磁盘文件或系统注册表。 还可以严格在内存中创建和打开证书存储。 内存存储提供临时证书存储,用于处理不需要保留的证书。

其他存储位置允许在本地计算机注册表的各个部分保留和搜索存储,或者在远程计算机上的注册表中设置适当的权限。

每个用户都有一个个人“我的存储”,用于存储该用户的证书。 “我的存储”可以位于多个物理位置中的任何一个,包括本地或远程计算机上的注册表、磁盘文件、数据库、目录服务、智能卡或其他位置。 虽然任何证书都可以存储在“我的存储”中,但此存储应保留给用户的个人证书:用于对用户的消息进行签名和解密的证书。

使用证书进行身份验证取决于是否具有由某些受信任的证书颁发者颁发的证书。 受信任的证书颁发者的证书通常保存在根存储中,根存储区当前保存到注册表子项中。 在 CryptoAPI 上下文中,根存储受到保护,用户界面对话框提醒用户仅将受信任的证书放入该存储区。 在企业网络情况下,可能会将证书推送 (系统管理员从域控制器计算机复制到客户端计算机上的根存储) 。 此过程为域的所有成员提供类似的信任列表。

其他证书可以存储在 证书颁发机构 (CA) 系统存储中,也可以存储在用户创建的基于文件的存储中。

有关使用和维护证书存储的函数列表,请参阅 证书存储函数

有关使用其中一些函数的示例,请参阅 示例 C 程序:证书存储操作

管理证书存储状态

使用证书存储中的证书

证书链接

集合存储

逻辑和物理存储

系统存储位置

证书存储迁移