2.19. Replace Section 5.3.22 - Polling Request and Response (轮询请求和响应)
2.19. Replace Section 5.3.22 - Polling Request and Response (轮询请求和响应)
[RFC4210] 的 Section 5.3.22 描述了何时以及如何为 ir, cr 和 kur 消息使用轮询消息。本文档将轮询机制扩展到任何类型的请求消息的未完成响应。此更新还修复了术语 'pReq' vs. 'pollReq' 和 'pRep' vs. 'pollRep' 的不一致使用。
用以下文本替换 [RFC4210] 的 Section 5.3.22:
这对消息旨在处理客户端需要轮询服务器以确定未完成响应的状态的场景 (即, 当收到 "waiting" PKIStatus 时)。
PollReqContent ::= SEQUENCE OF SEQUENCE {
certReqId INTEGER }
PollRepContent ::= SEQUENCE OF SEQUENCE {
certReqId INTEGER,
checkAfter INTEGER, -- time in seconds
reason PKIFreeText OPTIONAL }
为响应 ir, cr, p10cr 或 kur 请求消息, 轮询通过包含状态 "waiting" 的 ip, cp 或 kup 响应消息启动。对于任何类型的请求消息, 轮询都可以通过状态为 "waiting" 的错误响应消息启动。以下条款描述了如何使用轮询消息。假设在事务期间可以发送多个 certConf 消息。将针对每个包含已颁发证书的 CertStatus 的 ip, cp 或 kup 发送一个。
-
为响应 ip, cp 或 kup 消息, EE 将为所有已颁发的证书发送 certConf, 并期望每个 certConf 都有一个 PKIconf。EE 将为 ip, cp 或 kup 消息的每个状态为 "waiting" 的 CertResponse 元素以及状态为 "waiting" 的错误消息发送 pollReq 消息。其 certReqId 必须是状态为 "waiting" 的 CertResponse 数据结构的索引, 或 -1, 表示完整响应。
-
为响应 pollReq, 如果一个或多个仍在等待的请求证书准备就绪或某些其他类型请求的最终响应可用, CA/RA 将返回 ip, cp 或 kup; 否则, 它将返回 pollRep。
-
如果 EE 收到 pollRep, 它将至少等待 checkAfter 字段中给出的秒数, 然后再发送另一个 pollReq。
-
如果 EE 收到 ip, cp 或 kup, 那么它将以与初始响应相同的方式处理; 如果它收到任何其他响应, 那么这将被视为对原始请求的最终响应。
以下客户端状态机描述了对单个 CertResponse 元素的轮询。
START
|
v
Send ir
| ip
v
Check status
of returned <------------------------+
certs |
| |
+------------------------>|<------------------+ |
| | | |
| (issued) v (waiting) | |
Add to <----------- Check CertResponse ------> Add to |
conf list for each certificate pending list |
/ |
/ |
(conf list) / (empty conf list) |
/ ip |
/ +-----------------+
(empty pending list) / | pollRep
END <---- Send certConf Send pollReq---------->Wait
| ^ ^ |
| | | |
+-----------------+ +---------------+
(pending list)
在以下交换中, 终端实体在一个请求中注册两个证书。
步骤 终端实体 PKI
--------------------------------------------------------------------
1 格式化 ir
2 -> ir ->
3 处理 ir
4 两个证书都需要
手动干预
5 <- ip <-
6 处理 ip
7 格式化 pollReq
8 -> pollReq ->
9 检查证书请求状态
10 证书未就绪
11 格式化 pollRep
12 <- pollRep <-
13 等待
14 格式化 pollReq
15 -> pollReq ->
16 检查证书请求状态
17 一个证书就绪
18 格式化 ip
19 <- ip <-
20 处理 ip
21 格式化 certConf
22 -> certConf ->
23 处理 certConf
24 格式化 ack
25 <- pkiConf <-
26 格式化 pollReq
27 -> pollReq ->
28 检查证书状态
29 证书就绪
30 格式化 ip
31 <- ip <-
31 处理 ip
32 格式化 certConf
33 -> certConf ->
34 处理 certConf
35 格式化 ack
36 <- pkiConf <-
以下客户端状态机描述了对完整响应消息的轮询。
Start
|
| Send request
|
+----------- Receive response ------------+
| |
| ip/cp/kup/error with | other
| status "waiting" | response
| |
v |
+------> Polling |
| | |
| | Send pollReq |
| | Receive response |
| | |
| pollRep | other response |
+-----------+------------------->+<-------------------+
|
v
End