跳到主要内容

4.4. 扩展

4.4. 扩展

本节基于 X.509 版本 3 证书采用的扩展模型 (见 [RFC5280]) 定义若干标准扩展.客户端和响应方对所有扩展的支持都是可选的.对于每个扩展, 其定义会指明语法,OCSP 响应方执行的处理, 以及相应响应中包含的任何扩展.

4.4.1. Nonce

nonce 以密码方式绑定请求和响应, 用于防止重放攻击. nonce 在请求中作为 requestExtensions 之一包含, 在响应中则作为 responseExtensions 之一包含. 在请求和响应中, nonce 都由对象标识符 id-pkix-ocsp-nonce 标识, extnValue 则为 nonce 的值.

id-pkix-ocsp           OBJECT IDENTIFIER ::= { id-ad-ocsp }
id-pkix-ocsp-nonce OBJECT IDENTIFIER ::= { id-pkix-ocsp 2 }

Nonce ::= OCTET STRING

4.4.2. CRL 引用

OCSP 响应方可能希望指明发现已撤销或 onHold 证书的 CRL. 当 OCSP 用于仓库之间时, 这可能很有用, 也可作为一种审计机制. CRL 可以通过 URL (可获取该 CRL 的 URL), 编号 (CRL 编号) 或时间 (相关 CRL 创建时间) 指定. 这些扩展将指定为 singleExtensions. 此扩展的标识符为 id-pkix-ocsp-crl, 值为 CrlID.

id-pkix-ocsp-crl       OBJECT IDENTIFIER ::= { id-pkix-ocsp 3 }

CrlID ::= SEQUENCE {
crlUrl [0] EXPLICIT IA5String OPTIONAL,
crlNum [1] EXPLICIT INTEGER OPTIONAL,
crlTime [2] EXPLICIT GeneralizedTime OPTIONAL }

对于选择 crlUrl, IA5String 将指定可获取 CRL 的 URL.对于 crlNum, INTEGER 将指定相关 CRL 的 CRL number 扩展值.对于 crlTime, GeneralizedTime 将指示相关 CRL 的签发时间.

4.4.3. 可接受响应类型

OCSP 客户端 MAY 希望指定其能够理解的响应类型种类. 为此, 它 SHOULD 使用 OID 为 id-pkix-ocsp-response 且值为 AcceptableResponses 的扩展. 该扩展在请求中作为 requestExtensions 之一包含. AcceptableResponses 中包含的 OID 是此客户端可接受的各种响应类型的 OID (例如 id-pkix-ocsp-basic).

id-pkix-ocsp-response  OBJECT IDENTIFIER ::= { id-pkix-ocsp 4 }

AcceptableResponses ::= SEQUENCE OF OBJECT IDENTIFIER

如第 4.2.1 节所述, OCSP 响应方 SHALL 能够以 id-pkix-ocsp-basic 响应类型进行响应.相应地, OCSP 客户端 SHALL 能够接收并处理 id-pkix-ocsp-basic 响应类型的响应.

4.4.4. 归档截止

OCSP 响应方 MAY 选择在证书过期后继续保留撤销信息.从响应中的 producedAt 时间减去此保留区间值得到的日期, 定义为证书的 "archive cutoff" 日期.

启用 OCSP 的应用会使用 OCSP archive cutoff 日期来帮助证明某个数字签名在其生成日期是 (或不是) 可靠的, 即使验证该签名所需的证书早已过期.

为此类历史引用提供支持的 OCSP 服务器 SHOULD 在响应中包含 archive cutoff date 扩展. 如果包含, 该值 SHALL 作为由 id-pkix-ocsp-archive-cutoff 标识且语法为 GeneralizedTime 的 OCSP singleExtensions 扩展提供.

id-pkix-ocsp-archive-cutoff OBJECT IDENTIFIER ::= {id-pkix-ocsp 6}

ArchiveCutoff ::= GeneralizedTime

举例来说, 如果服务器采用 7 年保留区间策略运行, 并且状态在时间 t1 生成, 则响应中 ArchiveCutoff 的值将为 (t1 - 7 years).

4.4.5. CRL 条目扩展

[RFC5280] 第 5.3 节中指定为 CRL entry extensions 的所有扩展, 也作为 singleExtensions 受到支持.

4.4.6. 服务定位器

OCSP 服务器可以在一种模式下运行: 服务器接收请求, 并将其路由到已知对所标识证书具有权威性的 OCSP 服务器. serviceLocator 请求扩展就是为此目的定义的. 该扩展在请求中作为 singleRequestExtensions 之一包含.

id-pkix-ocsp-service-locator OBJECT IDENTIFIER ::= {id-pkix-ocsp 7}

ServiceLocator ::= SEQUENCE {
issuer Name,
locator AuthorityInfoAccessSyntax OPTIONAL }

这些字段的值从主体证书中的相应字段获得.

4.4.7. 首选签名算法

由于允许使用强制实现算法以外的算法, 且客户端目前没有机制指示其算法偏好, 因此服务器选择非强制算法时始终存在生成客户端可能不支持的响应的风险.

虽然 OCSP 响应方可以应用算法选择规则, 例如使用 CA 签署 CRL 和证书时采用的签名算法, 但这些规则在常见情况下可能失效:

  • 用于签署 CRL 和证书的算法可能与 OCSP 响应方用于签署响应的密钥对不一致.

  • 针对未知证书的请求不能为响应方在多个算法选项中进行选择提供依据.

在不修改协议的情况下, 最后一项准则无法通过 RFC 2560 [RFC2560] 协议使用带内信令所提供的信息来解决.

此外, OCSP 响应方可能希望采用不同于 CA 签署证书和 CRL 所用算法的签名算法, 原因有两个:

  • 响应方可以为证书状态响应采用一种比签署证书本身计算开销更低的算法.

  • 实现可能希望通过采用两个独立签名算法, 防范由某个签名算法被攻破而导致泄露的可能性.

本节描述:

  • 一个允许客户端指示首选签名算法集合的扩展.

  • 在未指定受支持的首选算法时, 最大化成功运行概率的签名算法选择规则.

4.4.7.1. 扩展语法

客户端 MAY 通过在 OCSPRequest 的 requestExtensions 中包含首选签名算法扩展, 在请求中声明一组首选算法.

id-pkix-ocsp-pref-sig-algs OBJECT IDENTIFIER ::= { id-pkix-ocsp 8 }

PreferredSignatureAlgorithms ::= SEQUENCE OF
PreferredSignatureAlgorithm

PreferredSignatureAlgorithm ::= SEQUENCE {
sigIdentifier AlgorithmIdentifier,
pubKeyAlgIdentifier SMIMECapability OPTIONAL
}

AlgorithmIdentifier 的语法定义于 RFC 5280 [RFC5280] 第 4.1.1.2 节.SMIMECapability 的语法定义于 RFC 5751 [RFC5751].

sigIdentifier 指定客户端首选的签名算法, 例如 algorithm=ecdsa-with-sha256.大多数常见签名算法没有参数.

pubKeyAlgIdentifier 指定客户端在用于验证 OCSP 响应的服务器证书中首选的主体公钥算法标识符, 例如 algorithm=id-ecPublicKey 且 parameters= secp256r1.

pubKeyAlgIdentifier 为 OPTIONAL, 提供一种指定必要参数的方式, 用于区分特定算法的不同用法; 例如, 客户端可以用它指定其对给定椭圆曲线算法支持的曲线.

客户端 MUST 支持所指定的每个首选签名算法, 并且客户端 MUST 按偏好顺序指定算法, 从最偏好到最不偏好.

本文档第 4.4.7.2 节描述服务器如何选择用于向请求客户端签署 OCSP 响应的算法.

4.4.7.2. 响应方签名算法选择

RFC 2560 [RFC2560] 未规定决定 OCSP 响应中所用签名算法的机制.这无法对所选算法提供足够确定性, 从而不利于互操作.

4.4.7.2.1. 动态响应

只要所选算法满足 OCSP 响应方的所有安全要求, 响应方 MAY 按以下优先级顺序选择受支持的签名算法, 以尽可能确保互操作性; 其中第一种选择机制具有最高优先级:

  1. 选择客户端请求中指定为首选签名算法的算法.

  2. 选择证书签发者签署证书撤销列表 (CRL) 时使用的签名算法, 该证书签发者为 CertID 指定的证书提供状态信息.

  3. 选择用于签署 OCSPRequest 的签名算法.

  4. 选择已通过带外机制公告为签名服务默认签名算法的签名算法.

  5. 选择正在使用的 OCSP 版本所规定的强制或推荐签名算法.

响应方 SHOULD 始终应用编号最低且能够选择出一个已知,受支持并满足响应方密码算法强度准则的算法的选择机制.

4.4.7.2.2. 静态响应

出于效率目的, 允许 OCSP 响应方在请求之前生成静态响应.这种情况可能不允许响应方在响应生成期间使用客户端请求数据; 但是, 响应方 SHOULD 仍在选择要返回的预生成响应时使用客户端请求数据.响应方 MAY 使用历史客户端请求作为决策输入的一部分, 以决定应使用哪些不同算法来签署预生成响应.

4.4.8. 扩展撤销定义

此扩展表示响应方支持第 2.2 节中 "revoked" 状态的扩展定义, 即同时包括未签发证书.其主要目的之一是允许审计确定响应方的运行类型.客户端无需解析此扩展即可确定响应中证书的状态.

当 OCSP 响应包含未签发证书的 "revoked" 状态时, 该响应中 MUST 包含此扩展. 此扩展 MAY 出现在其他响应中, 用于表明响应方实现了扩展撤销定义. 包含时, 此扩展 MUST 放置在 responseExtensions 中, 并且 MUST NOT 出现在 singleExtensions 中.

此扩展由对象标识符 id-pkix-ocsp-extended-revoke 标识.

id-pkix-ocsp-extended-revoke OBJECT IDENTIFIER ::= {id-pkix-ocsp 9}

该扩展的值 SHALL 为 NULL.此扩展 MUST NOT 标记为 critical.