协议概述
OCSP是一种相对简单的请求/响应协议,它使得客户端应用程序可以测定所需验证书的状态。一个OCSP客户端发送一个证书状态查询给一个OCSP响应器,并且等待直到响应器返回了一个响应。协议对OCSP客户端和OCSP响应器之间所需要交换的数据进行了描述。 一个OCSP请求包含以下数据:协议版本、服务请求、目标证书标识和可选的扩展项等。OCSP响应器对收到的请求返回一个响应(或是出错信息,或是确定的回复)。OCSP响应器返回出错信息时,该响应不用签名。出错信息包括以下类型:请求编码格式不正确、内部错误、稍后再试、请求需要签名、未授权。
OCSP响应器返回确定的回复时,该响应必须进行数字签名。一个确定的回复信息由以下组成:版本号、响应器名称、对每一张被请求证书的回复、可选扩展项、签名算法对象标识和签名值。在对每一张被请求证书的回复中包含有证书状态值:正常、撤消、未知。“正常”状态表示这张证书没有被撤消;“撤消”状态表示证书已被撤消;“未知”状态表示响应器不能判断请求的证书状态。
协议数据描述
请求消息描述:一个OCSP请求包括请求信息和对请求信息的签名,其形式化描述如下所示:
OCSPRequest::=SEQUENCE{
tbsRequestTBSRequest,
optionalSignature[0]EXPLICITSignatureOPTIONAL}
请求信息的签名是可选的。
如果响应器被设置为接收有签名的请求,而实际收到的请求没有签名时,响应器就返回一个“需要签名(sigRequired)”的出错信息。请求信息包括版本号、请求者名称(可选)、请求列表和可选的扩展项,如下所示:
TBSRequest::=SEQUENCE{
version[0]EXPLICITVersionDEFAULTv1,
requestorName[1]EXPLICITGeneralNameOPTIONAL,
requestListSEQUENCEOFRequest,
requestExtensions[2]EXPLICITExtensionsOPTIONAL}
Request::=SEQUENCE{
reqCertCertID,
singleRequestExtensions[0]EXPLICITExtensionsOPTIONAL}
一个OCSP请求可查询多个证书的状态。在每一个请求查询的证书标识中包含了Hash算法标识、证书颁发者(CA)名称Hash值、证书颁发者(CA)公钥Hash值和证书序列号。其形式化描述如下所示:
CertID::=SEQUENCE{
hashAlgorithmAlgorithmIdentifier,
issuerNameHashOCTETSTRING,
issuerKeyHashOCTETSTRING,
serialNumberCertificateSerialNumber}
响应消息描述:一个OCSP响应通常包括响应状态和响应字节。如果响应状态为某一种出错情况,那么响应字节将不被设置。其形式化描述如下所示:
OCSPResponse::=SEQUENCE{
responseStatusOCSPResponseStatus,
responseBytes[0]EXPLICIT ResponseBytesOPTIONAL}
响应状态有六种取值:一种是“成功”,表示响应器对接收到的请求返回一个确定的回复;另外五种为出错信息:请求编码格式不正确(malformedRequest)、内部错误(internalError)、稍后再试(trylater)、请求需要签名(sigRequired)、未授权 (unauthorized)。 如果接受到一个没有遵循OCSP语法规范的请求,响应器返回“请求编码格式不正确”;响应状态为“内部错误”表示 OCSP响应器处于一个不协调的内部状态,请求需要再试,暗示尝试另一个响应器;如果OCSP响应器正在工作,但是不能返回被请求证书的状态,那么“稍后再试”响应能被用来表示服务存在,但暂时不能响应;当服务器需要客户端签名请求后才能产生一个响应时,“请求需要签名”将被返回;当客户端未被授权允许向这台响应器发送请求时,“未授权”将被返回。 响应字节的值由响应类型标识和一个编码成OCTET字符串的响应信息(此信息由类型标识确定)组成。如下所示:
ResponseBytes::=SEQUENCE{
responseTypeOBJECTIDENTIFIER,
responseOCTETSTRING}
响应信息的值应该是基本OCSP响应 (BasicOCSPResponse)的DER编码。基本OCSP响应的形式化 描述如下所示:
BasicOCSPResponse::=SEQUENCE{
tbsResponseDataResponseData,
signatureAlgorithmAlgorithmIdentifier,
signatureBITSTRING,
certs[0]EXPLICITSEQUENCEOFCertificateOPTIONAL}
签名值(signature)是对响应数据(ResponseData)的签名结果。响应数据包括版本号、响应器标识、响应产生时间、响应列表和可选的扩展项。其形式化描述如下所示:
ResponseData::=SEQUENCE{
version[0]EXPLICITVersionDEFAULTv1,
responderIDResponderID,
producedAtGeneralizedTime,
responsesSEQUENCEOF SingleResponse,
responseExtensions[1] EXPLICITExtensions OPTIONAL}
如果一个OCSP请求中包含多个证书的查询请求,那么响应列表(responses)就列出了请求中所有证书状态的响应。每个证书状态响应(SingleResponse)包含证书标识、证书状态、本次更新时间、下次更新时间(可选)和扩展项,如下所示:
SingleResponse::=SEQUENCE{
certIDCertID,
certStatusCertStatus,
thisUpdateGeneralizedTime,
nextUpdate[0]EXPLICITGeneralizedTimeOPTIONAL,
singleExtensions[1]EXPLICITExtensionsOPTIONAL}
证书状态分为三种:正常(good)、撤消(revoked)、未知 (unknown)。
CertStatus::=CHOICE{
good[0]IMPLICITNULL,
revoked[1]IMPLICITRevokedInfo,
unknown[2]IMPLICITUnknownInfo}
猜你喜欢