OCSP 和 CRL:在 CA 或客户端证书中指定?

信息安全 tls 证书 公钥基础设施
2021-08-24 22:28:10

这是一个 PKI 设置示例:

* Root CA (offline)
  * Issuing CA
    * Client 1
    * Client 2

我想为根 CA 生成的 CRL 指定一个 CRL 分发点,并为颁发 CA 指定一个 OCSP URL。因此,有关已撤销客户端证书的信息只能通过 OCSP 获得。有关已撤销的颁发 CA 的信息(希望永远不需要)只能通过 CRL 获得。

问题是这两种方式中的哪一种是传达此政策的正确方式:

* Root CA (CRL distribution point = http://...)
  * Issuing CA (OCSP = http://...)
    * Client 1
    * Client 2

或者

* Root CA
  * Issuing CA (CRL distribution point = http://...)
    * Client 1 (OCSP = http://...)
    * Client 2 (OCSP = http://...)

基本上,我对谁指定用于获取吊销信息的 URI 感到困惑。这是在 CA 的证书中指定的,意思是“我是 CA,我会在这里告诉你我颁发的不再有效的证书”,还是在客户端证书中指定,意思是“如果这个证书被吊销了,你会在哪里找到它?”

我浏览了 RFC 5280 并找不到这个问题的明确答案。大多数例子表明第二种方式是正确的,但第一种方式对我来说似乎更有意义。哪一个?

如果第二种方法是正确的,是否还有理由在根 CA 中指定 CRL 分发点?

2个回答

短版:所有 URI 都应该在最终实体证书中。


对于 OCSP,应在授权信息访问扩展中指定 OCSP 响应者的位置,该扩展在RFC 5280 的第 4.2.2.1 节中进行了描述

权限信息访问扩展指示如何为出现扩展的证书的颁发者访问信息和服务。

能够提供关于给定 EE 证书的撤销信息的 OCSP 响应者是 CA 服务的一部分,即 EE 证书的颁发者。因此,URI 应该作为 EE 证书的扩展发布,就像上面引用的句子一样。

对于 CRL,CRL 分发点扩展的主要作用是将证书分隔为子集,以便单个 CRL 可能具有有限的范围并保持简短。该机制的工作原理是在 EE 证书(作为 CRL 分发点扩展的一部分)和应用于该证书的 CRL(作为发行分发点扩展的一部分)中出现相同的“分发点”(参见第 4.2.2 节)。 1.13)。由于分发点包含“名称”并且名称可以是 URI,因此习惯上使用这样的 URI 来指向可以下载 CRL 的位置。

OCSP 响应者和 CRL 下载 URI 出现在目标证书(要确定其撤销状态的证书)中是有道理的:相应的服务器在颁发 CA 的控制下,因此 URI 由该 CA 选择,并且可以仅在内容受 CA 控制的证书中设置。CA不能随意选择自己证书的内容:该证书由上级 CA(此处为“根 CA”)颁发。因此,CA 将其 URI 填充到它自己颁发的证书(最终实体证书)中。

这是一个很好的问题,因为规范对此含糊不清。

我们的验证代码假定终端实体证书包含 OCSP 和 CRL 地址,用于验证证书。即我们假设类似

  • 根 CA
    • 签发 CA
      • 客户端 1(CRL 分发点 = http://...,OCSP = http://...)
      • 客户端 2 (OCSP = http://...)
      • 客户端 3(CRL 分发点 = http://...)