在线证书状态协议(英语:Online Certificate Status Protocol,缩写:OCSP)是一个用于获取X.509数字证书撤销状态的网际协议[1]RFC 6960中定义,作为证书吊销列表(CRL)的替代品解决了在公开密钥基础建设(PKI)中使用证书吊销列表而带来的多个问题。[2]协议数据传输过程中使用ASN.1编码,并通常建立在HTTP协议上,此消息类型分为“请求消息”和“响应消息”,因此致OCSP服务器被称为“OCSP响应端”。

与证书吊销列表(CRL)的比较

  • 由于OCSP响应包含的信息少于典型的证书吊销列表(CRL),因此减轻了网络和客户端资源的负担;[3]
  • 由于OCSP响应端需要解析的信息更少,客户端提供的用于解析消息的库函数更简单;[4]
  • OCSP中,服务器可以记录主机在何时验证过特定的证书,由于请求不强制加密,相关信息可能被第三方获取。[1]

基本PKI应用场景

  1. Alice与Bob使用Carol颁发的数字证书。该场景中Carol是证书颁发机构(CA);
  2. Alice向Bob发送其由Carol颁发的数字证书,并发出请求建立连接的申请;
  3. Bob担心Alice的私钥已经泄露,因此向Carol发送“OCSP请求”消息并包含Alice的数字证书序列号;
  4. Carol的OCSP响应端从Bob发送的消息中获取数字证书的序列号,并在CA数据库中查找该数字证书的状态;
  5. Carol向Bob发送由其私钥签名的消息“OCSP响应”,并包含证书状态正常的信息;
  6. 由于Bob事先已经安装了Carol的数字证书,因此Bob使用Carol的公钥验证消息签名并获取到Alice的数字证书状态信息;
  7. Bob决定与Alice进行通信。

协议信息

由数字证书认证机构运行的OCSP服务器会对请求返回经过其签名的证书状态信息,分别为:正常(Good)、已废除(Revoked)、未知(Unknown)。如果有无法处理的请求,则会返回一个错误码。

OCSP支持附加扩展以便对PKI解决方案进行定制,如在响应中包含SCT信息来验证相关证书是否通过了公开审计。[5]

OCSP在极端情况下可能遭受重放攻击。中间人可以捕获一个已签名的“正常”响应,并在之后的一段时间重放这个响应来通过客户端的验证,即使在这段时间里证书可能已经被撤销。[6]为避免这个问题,OCSP允许客户端在请求中加入一个随机数并要求服务器在响应中包含这个随机数。但是由于大多数客户端和服务器还没有支持这个扩展,OCSP响应的较长有效期可能给重放攻击留下机会并借此威胁整个验证系统。

OCSP可以支持多于一级的CA结构。请求被转发到对应的服务器节点并查询状态,从而无须使用根CA的OCSP请求。

用于签名响应的私钥不需要和签发证书的私钥相同。证书的签发者可能委托其他机构响应OCSP请求。在这种情况下,服务器的证书必须由签发者进行验证,并在扩展内容中包括相关信息标识该证书可用于OCSP响应的签名。

隐私问题

OCSP对于部分用户来讲会造成隐私问题,因为OCSP必须和一个第三方建立连接(即使这个第三方是被软件提供商信任的)以验证证书状态。对此,OCSP装订是一个无须和CA发生连接的替选方案。

批评

OCSP不是缓解HTTPS服务器私钥泄露的可靠方法,因为攻击者窃取私钥后,再滥用私钥进行中间人攻击(MITM)时,往往也会干扰客户的OCSP查询,因为如果查询超时,大多数客户端将忽略OCSP,导致OCSP机制失效无法及时查询到证书吊销信息。[7]

浏览器支持情况

对于OCSP在主流浏览器中的支持:

需要注意的是,Google Chrome在2012年由于延迟和隐私问题禁用了OCSP的默认启用,[13]改用自己的更新机制来同步证书撤销情况。[14]

开源实现

目前的开源实现有:

  • XiPKI,基于OSGi,使用Java语言编写。[15]

参见

参考链接

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.