第 7 章 吊销证书并颁发 CRL

证书系统提供了撤销证书以及生成吊销证书列表的方法,称为证书撤销列表(CRL)。本章描述了撤销证书的方法,描述了 CMC 吊销,并提供 CRL 和设置 CRL 的详细信息。

7.1. 关于撤销证书

证书可由最终用户(证书的原始所有者)或证书管理器代理撤销。最终用户可以使用终端实体页面中提供的撤销表单来撤销证书。代理可以使用代理服务接口中的适当的表单来撤销最终用户证书。这两种情况下都需要基于证书的(SSL/TLS 客户端身份验证)。
最终用户只能撤销包含与为身份验证提供的证书相同的主题名称的证书。身份验证成功后,服务器会列出属于最终用户的证书。然后,最终用户可以选择要撤销的证书,也可以撤销列表中的所有证书。最终用户也可以指定附加详情,如每个证书撤销和吊销原因的日期,或整个证书的列表。
代理可以根据一系列序列号或主题名称组件吊销证书。提交撤销请求时,代理会收到它们可从中获取的证书列表。有关代理如何撤销最终用户证书的说明,请参阅 Red Hat Certificate System Planning、安装和部署指南
批准撤销请求时,证书管理器在其内部数据库中将对应的证书记录标记为撤销,如果配置为这样做,请从发布目录中删除撤销的证书。这些更改反映在 CA 问题的下一个 CRL 中。
使用公钥证书的服务器和客户端应用需要访问证书的有效性的信息。由于决定证书的有效性的一个因素是其撤销状态,这些应用程序需要知道是否已撤销的证书。CA 负责执行以下操作:
  • 如果 CA 收到撤销请求并批准,则撤销证书。
  • 使撤销的证书状态可供需要验证其有效状态的第三方或应用程序使用。
每当撤销证书时,证书管理器会自动更新其内部数据库中证书的状态,它会将内部数据库中的证书副本标记为撤销,如果证书管理器被配置为从数据库中删除证书。
传递证书撤销状态的标准方法是发布吊销的证书列表,即一个证书撤销列表(CRL)。CRL 是一个公开可用的证书列表,它已被撤销。
证书管理器可以配置为生成 CRL。通过在 CRL 配置中启用特定于扩展的模块,即可创建这些 CRL 以符合 X.509 标准。服务器通过其 CRL 发布点框架支持标准 CRL 扩展;有关设置 CRL 扩展以进行发布点的更多信息,请参阅 第 7.3.3 节 “设置 CRL 扩展”。证书管理器可在每次撤销证书时生成 CRL,并以定期间隔生成 CRL。如果设置了发布,则 CRL 可以发布到文件、LDAP 目录或 OCSP 响应器。
CRL 由发布 CRL 中列出的证书的 CA 或 CA 已授权的实体发布并数字签名。CA 可以使用单个密钥对为证书签名,以及它发布或两个单独的密钥对,一个用于签名证书,另一个用于签名 CRL。
默认情况下,证书管理器使用单个密钥对来签署它发布的证书及其生成的 CRL。要为证书管理器创建另一个密钥对,并将其专门用于签名 CRL,请参阅 第 7.3.4 节 “将 CA 设置为使用不同的证书来签名 CRL”
在定义和配置点时,生成 CRL,并在启用 CRL 生成时生成。
启用 CRL 后,服务器会在证书被撤销时收集撤销信息。服务器会尝试将撤销的证书与设置的所有发布点匹配。给定证书可以匹配任何问题点、一个发布点、几个发布点或所有发布点。当已撤销的证书与发布点匹配时,服务器会将有关证书的信息存储在那个发布点的缓存中。
缓存按照复制缓存的时间间隔复制到内部目录中。当达到创建 CRL 的时间间隔时,会从缓存创建一个 CRL。如果为此问题设置了 delta CRL,则在此时也会创建一个 delta CRL。自证书管理器开始收集此信息以来,完整的 CRL 包含所有撤销的证书信息。自上次更新完整 CRL 后,delta CRL 包含所有撤销的证书信息。
完整的 CRL 按顺序编号,如 delta CRLs。完整的 CRL 和 delta CRL 的数字相同;在这种情况下,delta CRL 的数字与 下一个 完整 CRL 相同。例如,如果完整的 CRL 是第一个 CRL,它是 CRL 1。delta CRL 是 Delta CRL 2。CRL 1 和 Delta CRL 2 的数据与下一个完整 CRL 2 合并,后者为 CRL 2。
注意
当对发布点的扩展进行修改时,不会为该问题点使用下一个完整 CRL 创建 delta CRL。创建 delta CRL,其中 第二个 full CRL 会被创建,然后所有后续完整 CRL。
内部数据库仅存储最新的 CRL 和 delta CRL。当每个新的 CRL 都被创建时,旧的 CRL 都会被覆盖。
发布 CRL 后,每次更新到 CRL 和 delta CRL 都会发布到发布设置中指定的位置。发布方法决定了存储多少个 CRL。对于文件发布,使用 CRL 的数字发布到文件的每个 CRL,因此不会覆盖任何文件。对于 LDAP 发布,发布的每个 CRL 都取代了目录条目中包含 CRL 的属性中的旧 CRL。
默认情况下,CRL 不包含有关撤销过期证书的信息。服务器可以通过为发布点启用该选项来包括撤销的过期证书。如果包含过期的证书,当证书过期时,有关撤销的证书的信息不会从 CRL 中删除。如果没有包含过期的证书,当证书过期时,有关撤销的证书的信息会从 CRL 中删除。

7.1.1. User-Initiated Revocation

当最终用户提交证书撤销请求时,撤销过程的第一步是证书管理器来识别和验证最终用户,以验证用户是否试图撤销自己的证书,而不是属于其他人的证书。
在 SSL/TSL 客户端身份验证中,服务器要求最终用户提供一个与要撤销的主题名称相同的证书,并使用该证书进行身份验证。服务器通过将为客户端身份验证的证书中的主题名称映射到其内部数据库中的证书中的主题名称来验证撤销请求的真实性。只有证书映射到其内部数据库中的一个或多个有效或过期证书时,服务器才会撤销证书。
身份验证成功后,服务器会列出与为客户端身份验证提供的证书的主题名称匹配的有效或过期证书。然后,用户可以选择要撤销或撤销列表中所有证书的证书。

7.1.2. 吊销证书的原因

证书管理器可以撤销它发布的任何证书。通常接受拒绝 CRL 中通常会包括的证书的原因代码,如下所示:
  • 0.未指定;不给出特定原因。
  • 1.与证书关联的私钥被破坏。
  • 2.与签发证书的 CA 关联的私钥被破坏。
  • 3.证书的所有者不再与证书的签发者关联,并且不再具有与证书获取的访问权限或不再需要证书的权限。
  • 4.另一个证书替换这个证书。
  • 5.发布证书的 CA 已设计为操作。
  • 6.证书正在保留待处理的进一步操作。它被视为撤销,但将来可能会退出,以便证书处于活动状态并再次有效。
  • 8.证书将从 CRL 中删除,因为它已从 hold 中删除。这只在 delta CRL 中发生。
  • 9.证书被撤销,因为证书的所有者已撤回。
证书可由管理员、代理和结束实体撤销。具有代理权限的代理和管理员可以使用代理服务页面中的表单撤销证书。最终用户可以使用最终用户界面的撤销选项卡中的表单来撤销证书。最终用户只能撤销自己的证书,而代理和管理员可以撤销服务器发布的任何证书。还需要最终用户向服务器进行身份验证才能撤销证书。
每当撤销证书时,证书管理器都会更新其内部数据库中证书的状态。服务器使用内部数据库中的条目跟踪所有撤销的证书,并在配置时,它通过将其发布到中央存储库来通知其他用户中的证书不再有效。

7.1.3. CRL 颁发点

由于 CRL 可能会增长非常大,因此有几个方法可以最大程度减少检索和交付大型 CRL 的开销。其中一种方法对整个证书空间进行分区,并将一个单独的 CRL 与每个分区相关联。此分区被称为 CRL 发布点,即维护所有撤销的证书子集的位置。分区可以基于吊销的证书是 CA 证书,无论是因为特定原因吊销,还是使用特定配置文件发布。每个问题点都由其名称标识。
默认情况下,证书管理器会生成并发布一个 CRL,即 master CRL。发布点可以为所有证书、只针对 CA 签名证书或包括过期证书的所有证书生成 CRL。
定义了问题点后,可以将它们包含在证书中,以便需要检查证书的撤销状态的应用程序可以访问证书中指定的 CRL 发布点,而不是主 CRL 或主 CRL。由于发布点上维护的 CRL 比 master CRL 小,因此检查撤销状态会更快。
CRL 发行版点可以通过设置 CRLDistributionPoint 扩展来与证书关联。

7.1.4. delta CRLs

可以为任何定义的发布点发布 delta CRL。delta CRL 包含自上次更新到完整 CRL 后撤销的任何证书的信息。问题点的 delta CRL 通过启用 DeltaCRLIndicator 扩展来创建。

7.1.5. 发布 CRL

证书管理器可以将 CRL 发布到文件、兼容 LDAP 的目录或 OCSP 响应者。证书管理器中会发布 CRL 的频率,如 第 9 章 发布证书和 CRL 所述。
由于 CRL 可能非常大,发布 CRL 可能需要很长时间,且进程可能会中断。可将特殊发布者配置为通过 HTTP1.1 将 CRL 发布到文件,如果进程中断,CA 子系统的 Web 服务器可能会在其中断时恢复发布,而不必再次开始。这在 第 9.8 节 “设置可恢复的 CRL 下载” 中进行了描述。

7.1.6. 证书撤销页面

证书管理器的末尾级页面包含默认 HTML 表单,用于撤销由 SSL/TLS 客户端进行身份验证的撤销。表单可从 Revocation 选项卡中访问。您可以通过点 User Certificate 链接来查看此类撤销的表单。
要更改表单外观以适应机构的需求,请编辑 UserRevocation.html,该表单允许 SSL/TSL 客户端对客户端或个人证书的撤销撤销。该文件位于 /var/lib/instance_name/webapps/subsystem_type/ee/subsystem_type 目录中。