数字证书相当于网上的身份证,由证书认证(CA)机构认证并颁发,且具有一个指定的寿命。当发生证书遗失等情况时,CA机构会吊销证书来终止证书寿命。这些被吊销的证书的序列号被CA机构公布于一个证书吊销列表 (Certificate Revocation List,简称CRL)中。通过阅读本文,你将了解CRL与OCSP的概念、作用、工作原理等信息。

什么是CRL

我们知道,数字证书一旦颁发是不可能收回的。但在证书有效期内,发生特殊情况,如:泄露密钥、从属关系改变,这时用户只能向当初颁发这张证书的Certificate Authority (CA)或Register Authority(RA)机构提出吊销证书的申请,CA或RA机构经过审核后将实施证书注销。
所谓注销,就是要求颁发这张证书的CA机构公布一个”黑名单“,宣布该张证书已经被注销作废,警告有关的交易者注意,不要再使用与这张证书绑定的公钥。在PKI安全认证体系中,这个”黑名单”称为证书吊销列表,英文是Certificate Revocation List(CRL)。

作用

数字证书注销机制可以防止证书遗失或发现私钥失密后,不法分子冒用用户证书、私钥实行欺诈交易所带来的损失。这和信用卡注销、有效证件注销的机制十分类似。

工作原理

当你申请注销数字证书后,安全认证应用软件在验证证书的有效性时,会去访问CRL列表。这个列表相当于“黑名单”,一旦发现通信对方的证书在这张列表中,就不能通过验证。

CRL内容

根据X.509标准,CRL内容及数据结构定义如下图所示:

CRL 版本号 CRL签名算法 CRL颁布者 本次更新时间 下次更新时间 ······注销的证书列表············ 扩展项······

其中,

  • CRL签名算法是指计算本CRL的数字签名所用算法的标识符(如:RSA、MD5等算法的标识符)。
  • CRL颁布者是指颁发CRL的CA机构的可识别名(DN)。
  • 注销的证书列表仅列出被注销证书的唯一序列号。
  • 扩展项,其包含:
    • 理由代码——指出该证书被注销的理由,如:密钥损坏、CA损坏、关系变动、操作终止等;
    • 证书颁发者——列出该证书颁发者的名字;
    • 控制指示代码——用于证书的临时冻结;
    • 失效日期——列出该证书不再有效的日期。

为了保证CRL的真实性和完整性,CRL数据的后面附有CA机构对CRL的数字签名。

CRL的更新

定期更新

从安全的角度上讲,CRL最好是进行实时更新,即一旦发生证书注销事件就立即更新,以杜绝欺诈案件的得逞。但这种实时更新的代价非常高,要占用大量的网络资源和服务器资源,反过来又会影响到网上交易的进行。因此,业内普遍的做法是定期更新。

增量CRL

当CRL数据总量非常庞大时,即使是每天更新一次,也会给系统带来过大的负担。增量CRL的想法就是不需要每注销一张证书就产生一个完整的、越来越大的CRL,它只是产生一个与注销该证书相关的增加信息。
根据定义,增量CRL是以已经颁发的注销信息为基础,称为基本CRL。增量CRL中含有的是基本CRL中不含有的信息。它的好处是体积很小的增量CRL可以比基本CRL的更新频率高得多。例如,庞大的基本CRL的更新周期如果是一周的话,增量CRL的更新周期可以定为八小时,甚至更短。显然,这样的安全策略具有较高的安全性,而且不会给系统造成过大负担。

什么是OCSP

在线证书状态协议(Online Certificate Status Protocol,简称OCSP)是维护服务器和其它网络资源安全性的两种普遍模式之一。它是一个无需证书撤消列表(CRL)就可决定数字证书当前状态的协议。本文详细介绍了它的概念、作用、工作原理等信息。
CA机构发布的“黑名单”,证书注销列表(CRL),存在一些缺点,如:必须经常在客户端下载以确保列表的更新。于是,存在另一种证书有效性的管理和查询方法,即在线查询机制。它使用的协议称为在线证书状态协议,英文是Online Certificate Status Protocol(OCSP)。
OCSP是IETF颁布的用于检查数字证书在某一交易时间是否有效的标准。该协议规定了服务器和客户端应用程序的通讯语法。OCSP给用户到期的证书一个宽限期,这样他们就可以在更新以前的一段时间内继续访问服务器。

OCSP优点

OCSP为网上业务提供了一种检验数字证书有效性的途径,它通过实时在线地向用户提供证书状态,比CRL处理速度更快、更方便,也更具独立性。并避免了令人头痛的逻辑问题和处理开销。

工作原理

当用户试图访问一个服务器时,会生成一个查询指定证书状态信息的请求,并将请求转发到一个OCSP应答器(服务器),应答器建立与CA证书库链接查询该证书的状态,然后回复“有效”、“注销”或“未知”的响应。

OCSP请求

简单地说,一个OCSP请求由协议版本号服务请求类型目标证书标识、可能被OCSP响应器处理的可选扩展等信息组成。
OCSP响应器在接受请求后,会检测一下内容:

  1. 信息是否正确格式化
  2. 响应器是否被配置提供请求服务
  3. 请求是否包含了响应器需要的信息

OCSP回复

一个OCSP请求相对的回复由回复类型实际回复字节组成。所有确定的回复都必须经过数字签名,以保证这个信息的真实性和完整性。签名密钥属于CA,即颁发这张证书的权威、可信的第三方机构,因此,在任何情况下,用户都能够信任这个响应信息。一个确定的回复信息由以下组成:

  • 回复语法的版本
  • 响应器名称
  • 对每一张被提及证书的回复,包括证书标识证书状态值(有效、注销或未知)、回复有效期以及可选扩展
  • 可选扩展
  • 签名算法对象标识符号
  • 对回复信息散列后的签名


详细信息见下表所示:

值或值的限制
状态 响应状态。包括成功、请求格式错误、内部错误、稍后重试、请求没有签名和请求签名证书无授权,当状态为成功时必须包括以下各项。
版本 V1
签名算法 签发OCSP的算法。使用SHA1 With RSA Encryption (OID:1.2.840.113549.1.1.5)算法签名。
颁发者 签发OCSP的实体。欠打这公钥的SHA1数据摘要值和证书甄别名。
产生时间 OCSP响应的产生时间。
证书状态列表 包括请求中所查询的证书状态列表。每个证书状态包括证书标识、证书状态以及证书注销信息。
证书标识 包括数据摘要算法(SHA1,OID:1.3.14.3.2.26)、证书甄别名数据摘要值、证书公钥数据摘要值和证书序列号。
证书状态 证书的最新状态。包括有效、注销和未知。
证书注销信息 当返回证书状态为注销时,包含注销时间和注销原因。

特殊情况

OCSP响应器会返回一个出错信息。这些信息无须签名。错误信息可以是以下一些内容:

  • 未正确格式化的请求(malformedRequest),如:接受到一个没有遵循OCSP语法的请求。
  • 内部错误(internalError),表示OCSP响应器处于一个不协调的内部状态。
  • 请稍后再试(trylater),表示OCSP响应器存在,但暂时不能响应。
  • 需要签名(sigRequired),表示服务器需要客户端签名请求后才能产生一个回复。
  • 未授权(unauthorized),表示客户端未被授权允许向这台服务器发送请求。

另外,OCSP在线查询机制只能检测证书的注销状态,没有其他功能,如:不能检查证书的有效期。但是这种用法对于验证证书的有效性来说是快速有效的。
由于使用OCSP在线查询必须保持用户在线状态,且用户访问的对象集中在CA机构的OCSP服务器上,这同样会带来高峰负载过重,交通拥塞效率下降的问题。