跳到主要内容

2. 协议概述

2. 协议概述

作为周期性 CRL 检查的替代或补充, 可能需要及时获取有关证书撤销状态的信息 (参见 [RFC5280] 第 3.3 节).示例包括高价值资金转账或大额股票交易.

在线证书状态协议 (Online Certificate Status Protocol, OCSP) 使应用能够确定已标识证书的 (撤销) 状态.OCSP 可用于满足某些运行要求, 提供比 CRL 更及时的撤销信息, 也可用于获取附加状态信息.OCSP 客户端向 OCSP 响应方发出状态请求, 并在响应方提供响应之前暂停接受相关证书.

本协议规定了检查一个或多个证书状态的应用与提供相应状态的服务器之间需要交换的数据.

2.1. 请求

OCSP 请求包含以下数据:

  • 协议版本

  • 服务请求

  • 目标证书标识符

  • 可选扩展, OCSP 响应方 MAY 处理这些扩展

收到请求后, OCSP 响应方判断:

  1. 消息是否格式良好,

  2. 响应方是否被配置为提供所请求的服务, 以及

  3. 请求是否包含响应方所需的信息.

如果任一条件不满足, OCSP 响应方生成错误消息; 否则, 返回明确响应.

2.2. 响应

OCSP 响应可以有多种类型.OCSP 响应由响应类型和实际响应的字节组成.有一种基本 OCSP 响应类型 MUST 由所有 OCSP 服务器和客户端支持.本节余下内容仅涉及这种基本响应类型.

所有明确响应消息 SHALL 进行数字签名.用于签署响应的密钥 MUST 属于以下之一:

  • 签发所涉证书的 CA

  • 公钥受请求方信任的受信任响应方 (Trusted Responder)

  • CA 指定响应方 (CA Designated Responder, 即第 4.2.2.2 节定义的授权响应方), 其持有由 CA 直接签发且经过特殊标记的证书, 表明该响应方可以为该 CA 签发 OCSP 响应

明确响应消息由以下内容组成:

  • 响应语法的版本

  • 响应方标识符

  • 响应生成时间

  • 对请求中每个证书的响应

  • 可选扩展

  • 签名算法 OID

  • 对响应哈希计算得到的签名

对请求中每个证书的响应由以下内容组成:

  • 目标证书标识符

  • 证书状态值

  • 响应有效性区间

  • 可选扩展

本规范定义以下明确响应指示符, 用于证书状态值:

  • good

  • revoked

  • unknown

"good" 状态表示对状态查询的肯定响应.至少, 该肯定响应表示当前在其有效期内,具有所请求证书序列号的证书未被撤销.此状态并不一定意味着该证书曾经被签发, 也不一定意味着响应生成时间位于证书有效期内.响应扩展可用于传达响应方关于证书状态断言的附加信息, 例如关于签发,有效性等的肯定声明.

"revoked" 状态表示证书已被撤销, 可以是临时撤销 (撤销原因为 certificateHold), 也可以是永久撤销.如果相关 CA 没有任何记录表明其曾使用当前或先前任何签发密钥签发过具有请求中证书序列号的证书 (本文档称为 "non-issued" 证书), 也 MAY 返回此状态.

"unknown" 状态表示响应方不了解所请求的证书, 通常是因为请求指示了一个该响应方不服务的未知签发者.

注意: "revoked" 状态表示应拒绝具有所请求序列号的证书, 而 "unknown" 状态表示该响应方无法确定状态, 从而允许客户端决定是否尝试其他状态信息来源 (例如 CRL).当响应方的意图是让客户端拒绝证书而不是尝试其他状态信息来源时, 这使 "revoked" 响应适用于未签发证书 (如上定义).为了保持与 RFC 2560 部署的向后兼容, 对未签发证书使用 "revoked" 状态仍然是可选的.例如, 响应方可能不知道某个请求的序列号是否已分配给任何已签发证书, 或者响应方可能按照 RFC 5019 提供预生成响应, 因此无法为所有未签发证书序列号提供签名响应.

当响应方向未签发证书的状态请求发送 "revoked" 响应时, 响应方 MUST 在响应中包含扩展撤销定义响应扩展 (第 4.4.8 节), 指明 OCSP 响应方支持 "revoked" 状态的扩展定义, 也覆盖未签发证书.此外, 与该未签发证书相关的 SingleResponse:

  • MUST 指定撤销原因为 certificateHold (6),

  • MUST 指定 revocationTime 为 January 1, 1970, 并且

  • MUST NOT 包含 CRL references 扩展 (第 4.4.2 节) 或任何 CRL entry 扩展 (第 4.4.5 节).

2.3. 异常情况

发生错误时, OCSP 响应方可以返回错误消息.这些消息不进行签名.错误可以属于以下类型:

  • malformedRequest

  • internalError

  • tryLater

  • sigRequired

  • unauthorized

如果收到的请求不符合 OCSP 语法, 服务器生成 "malformedRequest" 响应.

"internalError" 响应表示 OCSP 响应方到达不一致的内部状态.应重试该查询, 可能使用另一个响应方.

如果 OCSP 响应方正在运行, 但无法返回所请求证书的状态, 可使用 "tryLater" 响应表示该服务存在但暂时无法响应.

当服务器要求客户端对请求进行签名才能构造响应时, 返回 "sigRequired" 响应.

当客户端无权向该服务器发起此查询, 或服务器无法以权威方式响应时, 返回 "unauthorized" 响应 (参见 [RFC5019] 第 2.2.3 节).

2.4. thisUpdate, nextUpdate 和 producedAt 的语义

本文档定义的响应可以包含四个时间: thisUpdate, nextUpdate, producedAt 和 revocationTime.这些字段的语义为:

thisUpdate: 响应方已知所指示状态正确的最近时间.

nextUpdate: 在该时间或该时间之前, 将有关于证书状态的更新信息可用.

producedAt: OCSP 响应方签署此响应的时间.

revocationTime: 证书被撤销或置于挂起状态的时间.

2.5. 响应预生成

OCSP 响应方 MAY 预先生成签名响应, 指定证书在特定时间的状态.状态被认为正确的时间 SHALL 反映在响应的 thisUpdate 字段中.在该时间或该时间之前将有更新信息可用的时间反映在 nextUpdate 字段中, 而响应生成时间出现在响应的 producedAt 字段中.

2.6. OCSP 签名权限委托

签署证书状态信息的密钥不必与签署该证书的密钥相同.证书签发者通过签发一个证书来显式委托 OCSP 签名权限, 该证书在 OCSP 签名者证书的扩展密钥用法扩展 (extended key usage extension, 定义于 [RFC5280] 第 4.2.1.12 节) 中包含唯一值.此证书 MUST 由知情 CA 直接签发给响应方.详见第 4.2.2.2 节.

2.7. CA 密钥泄露

如果 OCSP 响应方知道某个 CA 的私钥已泄露, 它 MAY 对该 CA 签发的所有证书返回 "revoked" 状态.