7.3 與操作相關的數據結構
7.3.1 初始化請求
一個初始化請求消息的PKIBody包含的是一個CertReqMessages數據結構體,這個結構體詳細說明了所請求的證書。通常,可以為每一個申請的證書提供下列模板字段:SubjectPublicKeyInfo、KeyId和Validity (詳細信息參見附錄B)。此消息用于實體在PKI體系中的最初初始化。
CertReqMessages的語法見附錄D及RFC2511。
7.3.2 初始化響應
一個初始化響應消息的PKIBody包含的是一個CertRepMessage數據結構體,這個結構體對應每個證書請求均包括一個PKIStatusInfo字段、一個主題證書及可能存在的一個私鑰(這個私鑰通常由會話密鑰加密,而會話密鑰本身由protocolEncrKey來加密)。
CertRepMessage的語法見7.3.4。如果PKI消息的保護方式是“共享秘密信息”(見7.1.3),則caPubs字段內的任何證書都可以被消息發起者作為根CA證書來直接信任。
7.3.3 注冊/認證請求
一個注冊/認證請求消息的PKIBody包含的是一個CertReqMessages數據結構體,這個結構體詳細說明了所請求的證書。當已存在于PKI體系中實體想獲取額外的證書時使用此消息。
CertReqMessages的語法見附錄D及RFC2511。
作為可選擇,PKIBody也可以包含一個CertificationRequest結構體(此結構體在[PKCS10]的ASN.1結構CertificationRequest部分有完全詳細的說明)。當需要與早期系統進行一些交互操作時,申請簽名密鑰證書的請求中可以使用該結構體,但不是絕對必要的情況下建議不使用此結構體。
7.3.4 注冊/認證響應
一個認證響應消息的PKIBody包含的是一個CertRepMessage數據結構體,這個結構體包含了與每個證書請求對應的狀態值,同時根據情況還可能包含一個CA的公鑰,失敗信息,一個主題證書和一個加密后的私鑰。
CertRepMessage ::= SEQUENCE {
caPubs [1] SEQUENCE SIZE (1..MAX) OF Certificate OPTIONAL,
response SEQUENCE OF CertResponse
}
CertResponse ::= SEQUENCE {
certReqId INTEGER,
– 使用此項使響應與請求對應 (若相對應的請求中未指明certReqId ,則此項應填-1)
status PKIStatusInfo,
certifiedKeyPair CertifiedKeyPair OPTIONAL,
rspInfo OCTET STRING OPTIONAL
– 類似于RFC2511中CertReqMsg結構中為regInfo定義的id-regInfo-utf8Pairs字符串
}
CertifiedKeyPair ::= SEQUENCE {
certOrEncCert CertOrEncCert,
privateKey [0] EncryptedValue OPTIONAL,
–參見RFC2511中編碼的說明
publicationInfo [1] PKIPublicationInfo OPTIONAL
}
CertOrEncCert ::= CHOICE {
certificate 0] Certificate,
encryptedCert [1] EncryptedValue
}
在每個CertResponse中failInfo(在PKIStatusInfo中)和certificate(在CertifiedKeyPair中)兩個字段只能出現一個(取決于狀態)。在某些狀態值(例如:waiting)的情況下,兩者都不會出現。
給定了EncryptedCert和相關的解密私鑰就可以獲得證書。這種方式的目的是允許CA返回證書值,但只有預期的接收者才能夠獲得實際的證書。這種方法的好處在于CA在無法證明請求者就是擁有相應私鑰的終端實體的情況下依然可以返回證書(注意:直到CA收到返回的PKIConfirm消息后才能證明)。因此,在POP驗證出錯時CA并不是必須作廢該證書。
7.3.5 密鑰更新請求內容
密鑰更新請求使用CertReqMessages語法結構。通常,可以為每一個要更新的密鑰提供下列模板字段:SubjectPublicKeyInfo, KeyId及Validity。這個消息用于請求更新已存在的證書(未作廢且未過期)。該操作有時被稱作“證書更新”操作。所謂更新證書就是使用新的公鑰或以原有公鑰的證書替換現有的證書。
CertReqMessages的語法見附錄D及RFC2511。
000011.1.6 密鑰更新響應內容
密鑰更新響應使用CertRepMessage語法結構。該響應與初始化響應相同。
CertRepMessage的語法見7.3.4。
7.3.7 密鑰恢復請求內容
密鑰恢復請求的語法與初始化請求中的CertReqMessages相同。通常,可以為一個簽名公鑰申請證書時提供下列模板字段:SubjectPublicKeyInfo和KeyId(進一步的信息見附錄B)。
CertReqMessages的語法見附錄D及RFC2511。注意:如果需要密鑰歷史,請求者必須在請求消息中加入協議加密密鑰。
7.3.8 密鑰恢復響應內容
密鑰恢復響應使用下列語法。對于某些狀態值(如:waiting),所有的可選項均不會出現。
KeyRecRepContent ::= SEQUENCE {
status PKIStatusInfo,
newSigCert [0] Certificate OPTIONAL,
caCerts [1] SEQUENCE SIZE (1..MAX) OF Certificate OPTIONAL,
keyPairHist [2] SEQUENCE SIZE (1..MAX) OF
CertifiedKeyPair OPTIONAL
}
7.3.9 撤銷請求內容
當請求撤銷一個證書(或多個)時,使用下列數據結構。請求者的名字出現在PKIHeader結構體中。
RevReqContent ::= SEQUENCE OF RevDetails
RevDetails ::= SEQUENCE {
certDetails CertTemplate,
– 允許請求者盡可能多的提交請求撤銷的證書的資料
– (例如:在無法獲得序列號的情況下)
crlEntryDetails Extensions OPTIONAL
– 所請求的 crlEntryExtensions
}
7.3.10 撤銷響應內容
撤銷響應是對上述消息的響應,生成該響應后將發送給撤銷請求者。(可以向請求作廢證書的擁有者發送一個撤銷公告消息)。
RevRepContent ::= SEQUENCE {
status SEQUENCE SIZE (1..MAX) OF PKIStatusInfo,
– 與RevReqContent中發送的順序相同
revCerts [0] SEQUENCE SIZE (1..MAX) OF CertId OPTIONAL,
– 撤銷請求的IDs (與status的順序相同)
crls [1] SEQUENCE SIZE (1..MAX) OF CertificateList OPTIONAL
– 結果CRL (可能不止一個)
}
7.3.11 交叉認證請求內容
交叉認證請求與一般認證請求使用的語法相同(CertReqMessages),但具有下列限制:密鑰對必須由請求CA產生且私鑰一定不能發送給響應CA。這個請求也可以用于子CA請求父CA為其簽發的證書。
CertReqMessages的語法見附錄D及RFC2511。
7.3.12 交叉認證響應內容
交叉認證響應與一般認證響應使用的語法相同(CertRepMessage),其約束是不會發送加密的私鑰。
CertRepMessage的語法見7.3.4。
7.3.13 CA 密鑰更新公告內容
當CA更新了自己的密鑰對后,可以使用下列數據結構宣布這一事件。
CAKeyUpdAnnContent ::= SEQUENCE {
oldWithNew Certificate, – 用新私鑰簽名的舊證書
newWithOld Certificate, – 用舊私鑰簽名的新證書
newWithNew Certificate,– 用新私鑰簽名的新證書
}
7.3.14 證書公告
這個結構體可以用于公告證書的存在。
CertAnnContent ::= Certificate
00001注: 此消息適用于沒有其它證書發布方法的情況;對于利用X.500目錄服務發布證書等情況不建議使用此消息。
7.3.15 撤銷公告
當CA已撤銷或即將撤銷一個證書時,可以公告這一事件(或將要來臨的事件)。
RevAnnContent ::= SEQUENCE {
status PKIStatus,
certId CertId,
willBeRevokedAt GeneralizedTime,
badSinceDate GeneralizedTime,
crlDetails Extensions OPTIONAL
– 額外的CRL 細節(如:crl 序列號、作廢原因、位置等)
}
CA可以使用這個消息來警告(或通知)一個證書持有者它的證書將要(或已經)被撤銷。這主要用于撤銷請求來自于非證書持有者的情況。
willBeRevokedAt字段包含的是一個新的條目將加入到相應CRLs的時間。
7.3.16 CRL 公告
當CA簽發了一個新的CRL(或一批CRL)時,可以使用以下數據結構宣布這一事件。
CRLAnnContent ::= SEQUENCE OF CertificateList
7.3.17 PKI 確認內容
這個消息在協議數據交換中作為最后的PKIMessage。由于PKIHeader中已包含了所有必需的消息,所以它的內容為空。
PKIConfirmContent ::= NULL
7.3.18 PKI 通用消息內容
InfoTypeAndValue ::= SEQUENCE {
infoType OBJECT IDENTIFIER,
infoValue ANY DEFINED BY infoType OPTIONAL
}
– InfoTypeAndValue的內容包含但不限于下列值(更多的細節見后續章條,
– 語法描述見附錄F):
– { CAProtEncCert = {id-it 1}, Certificate }
– { SignKeyPairTypes = {id-it 2}, SEQUENCE OF AlgorithmIdentifier }
– { EncKeyPairTypes = {id-it 3}, SEQUENCE OF AlgorithmIdentifier }
– { PreferredSymmAlg = {id-it 4}, AlgorithmIdentifier }
– { CAKeyUpdateInfo = {id-it 5}, CAKeyUpdAnnContent }
– { CurrentCRL = {id-it 6}, CertificateList }
– 其中,{id-it} = {id-pkix 4} = {1 3 6 1 5 5 7 4},這個構造也可用于定義
– 新的PKIX證書管理協議的請求和相應消息或通用目的消息(例如公告)
– 以滿足未來或特定環境的要求
GenMsgContent ::= SEQUENCE OF InfoTypeAndValue
– EE,RA,或者CA都可以發送該消息(取決于消息的內容)。對于上面的
– 給出的某些例子,GenMsg 中InfoTypeAndValue的可選參數infoValue通
– 常會被省略(即它只應用于相關的GenRep消息中)。接收方有權忽略它
– 不能識別的對象標識符。如果消息由EE發往CA,若結構內容為空的表明
– CA可以發送其希望發送的任意或所有信息
7.3.19 PKI通用響應消息
GenRepContent ::= SEQUENCE OF InfoTypeAndValue
– 接收方可以忽略其不能識別的OID
7.3.20 錯誤消息內容
ErrorMsgContent ::= SEQUENCE {
pKIStatusInfo PKIStatusInfo,
errorCode INTEGER OPTIONAL,
– 與實現相關的錯誤碼
errorDetails PKIFreeText OPTIONAL
– 與實現相關的錯誤描述
}
推薦文章: