7.3 響應
本條規定了確定響應的ASN.1規范。根據所使用的傳輸機制(HTTP、SMTP、LDAP等),實際的消息格式可能會發生相應的變化。
7.3.1 響應語法
一個OCSP響應至少由一個指明先前請求的處理狀態的responseStatus字段構成。如果responseStatus的值是某個錯誤條件,則不設置responseBytes。
OCSPResponse ::= SEQUENCE {
responseStatus OCSPResponseStatus,
responseBytes [0] EXPLICIT ResponseBytes OPTIONAL }
OCSPResponseStatus ::= ENUMERATED {
successful (0), --響應被有效確認
malformedRequest (1), --非法確認請求
internalError (2), --發布者內部錯誤
tryLater (3), --稍候重試
sigRequired (4), --必須對請求簽名
unauthorized (5), --請求未被授權
}
responseBytes的值由一個對象標識符和響應語法組成,該響應語法由按照OCTECT STRING編碼的OID來標識。
ResponseBytes ::= SEQUENCE {
responseType OBJECT IDENTIFIER,
response OCTET STRING }
對于基本的OCSP響應器, responseType應為id-pkix-ocsp-basic.
id-pkix-ocsp OBJECT IDENTIFIER ::= { id-ad-ocsp }
id-pkix-ocsp-basic OBJECT IDENTIFIER ::= { id-pkix-ocsp 1 }
OCSP響應器應能產生id-pkix-ocsp-basic類型的響應。相應地,OCSP 客戶端應有能力接受和處理此類響應。
response的值應為BasicOCSPResponse的DER編碼。
BasicOCSPResponse ::= SEQUENCE {
tbsResponseData ResponseData,
signatureAlgorithm AlgorithmIdentifier,
signature BIT STRING,
certs [0] EXPLICIT SEQUENCE OF Certificate OPTIONAL }
signature的值應該基于DER編碼的ResponseData哈希值計算得到。
ResponseData ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
responderID ResponderID,
producedAt GeneralizedTime,
responses SEQUENCE OF SingleResponse,
responseExtensions [1] EXPLICIT Extensions OPTIONAL }
ResponderID ::= CHOICE {
byName [1] Name,
byKey [2] KeyHash }
KeyHash ::= OCTET STRING – 響應器公開密鑰的SHA-1哈希
(不包括tag和length字段)
SingleResponse ::= SEQUENCE {
certID CertID,
certStatus CertStatus,
thisUpdate GeneralizedTime,
nextUpdate [0] EXPLICIT GeneralizedTime OPTIONAL,
singleExtensions [1] EXPLICIT Extensions OPTIONAL }
CertStatus ::= CHOICE {
good [0] IMPLICIT NULL,
revoked [1] IMPLICIT RevokedInfo,
unknown [2] IMPLICIT UnknownInfo }
RevokedInfo ::= SEQUENCE {
revocationTime GeneralizedTime,
revocationReason [0] EXPLICIT CRLReason OPTIONAL }
UnknownInfo ::= NULL –此處可用枚舉替代
7.3.2 響應語法的注解
7.3.2.1 時間
thisUpdate和nextUpdate兩個字段定義了有效時間間隔。這個時間間隔是和CRLs中的{thisUpdate,nextUpdate}間隔相對應。NextUpdate值比本地系統時間早的響應應被認為無效。ThisUpdate值比本地系統時間晚的響應也應被認為無效。未提供nextUpdate值的響應和未提供nextUpdate值的CRL意義相同。
producedAt時間是響應被簽名的時間。
7.3.2.2 授權的響應器
對證書狀態信息簽名的密鑰和簽發證書的密鑰不必相同。但必須確保對該信息進行簽名的實體是經過授權的。因此,證書的簽發者直接對OCSP響應簽名,或明確地指派授權給另一個實體對OCSP響應簽名。CA通過在OCSP響應器證書的extendedKeyUsage擴展中包含id-kp-OCSPSigning來指派OCSP響應器對響應進行簽名。OCSP響應器證書必須直接由CA發布,該CA還發布了需要驗證狀態的證書。
id-kp-OCSP Signing OBJECT IDENTIFIER ::= {id-kp 9}
依賴于OCSP響應的系統或應用必須能夠檢測并使用上述的id-ad-ocspSigning值,它們可以提供一種方法在本地配置一個或多個OCSP簽名權威實體以及信任這些權威實體的CA。如果用來驗證響應上的簽名所需的證書不能滿足以下任何標準,響應必須被拒絕:
a) 本地配置的OCSP簽名權威實體中包含了與待驗證狀態的證書相匹配的證書;
b) 或是簽發待驗證狀態證書的CA證書;
c) 在extendedKeyUsage擴展中含有id-ad-ocsp Signing值,并且由簽發待驗證狀態證書的CA發布。
附加的接受或拒絕標準可以應用于響應自身,或應用于驗證響應簽名的證書。
7.3.2.2.1 授權響應器的撤銷檢查
既然一個授權權威OCSP響應器可以為一個或多個CA提供狀態信息,OCSP客戶端就需要知道如何去檢查授權權威響應器的證書是否已被撤銷。CA可任選以下三種方法之一來解決這個問題:
a) CA可指定OCSP客戶端在響應器證書的整個生存期內信任該響應器。 CA 通過在響應器證書中包含id-pkix-ocsp-nocheck擴展來完成該指定。這應該是一個非關鍵性的擴展。擴展值應為空。至少對于證書的有效期而言,發布這樣一個證書的CA應認識到響應器密鑰的泄密同用來簽發CRL的CA密鑰的泄密所帶來的后果一樣嚴重。CA可以選擇發布一種有效期很短并且經常更新的證書,也就是短生命周期的證書。
id-pkix-ocsp-nocheck OBJECT IDENTIFIER ::= { id-pkix-ocsp 5 }
b) CA 可以指定如何檢查響應器證書是否已被撤銷。假如是使用CRLs或CRL分布點來檢查的話,就能夠使用CRL的分布點來完成,假如是用其它的方法來檢查,就要用到權威實體信息訪問(AuthorityInfoAccess擴展)。在RFC2459中有這兩種機制的詳細說明。
c) CA可選擇不指定檢查響應器證書是否已被撤銷的方法。在此情況下,將遵循OCSP客戶端的本地安全策略來決定是否做這項檢查工作。
推薦文章: