搜索结果: GM/T 0089-2020, GM/T0089-2020, GMT 0089-2020, GMT0089-2020
| 标准编号 | GM/T 0089-2020 (GM/T0089-2020) | | 中文名称 | 简单证书注册协议规范 | | 英文名称 | Simple certificate enrollment protocol specification | | 行业 | Chinese Industry Standard (推荐) | | 中标分类 | L80 | | 字数估计 | 21,211 | | 发布日期 | 2020-12-28 | | 实施日期 | 2021-07-01 | | 标准依据 | 国家密码管理局公告第41号 | | 发布机构 | 国家密码管理局 |
GM/T 0089-2020
(Simple certificate registration protocol specification)
ICS 35.040
CCSL80
中华人民共和国密码行业标准
简单证书注册协议规范
2020-12-28发布
2021-07-01实施
国家密码管理局 发 布
目次
前言 Ⅲ
引言 Ⅳ
1 范围 1
2 规范性引用文件 1
3 术语和定义 1
4 缩略语 2
5 SCEP功能 2
5.1 SCEP实体 2
5.2 客户端认证 3
5.3 注册认证 3
5.4 CA/RA证书分发 3
5.5 证书注册 4
5.6 证书查询 6
5.7 CRL查询 6
5.8 证书撤销 6
6 SCEP安全消息对象 6
6.1 概述 6
6.2 SCEP消息 7
6.3 SCEP消息类型 9
6.4 简化的SignedData数据类型 11
7 SCEP事务 11
7.1 获取CA证书 11
7.2 证书注册 11
7.3 证书轮询 12
7.4 证书查询 12
7.5 CRL查询 12
7.6 获取下一个CA证书 13
8 SCEP传输协议 13
8.1 HTTP消息格式 13
8.2 SCEP消息 14
附录A(规范性) GetCACaps消息 16
参考文献 17
简单证书注册协议规范
1 范围
本文件定义了使用SM2算法进行证书注册的简单协议。
本文件适用于指导研制提供证书自动注册的数字证书认证系统,以及使用SM2算法进行设备证书
的自动注册。
2 规范性引用文件
下列文件中的内容通过文中的规范性引用而构成本文件必不可少的条款。其中,注日期的引用文
件,仅该日期对应的版本适用于本文件;不注日期的引用文件,其最新版本(包括所有的修改单)适用于
本文件。
GB/T 20518-2018 信息安全技术 公钥基础设施 数字证书格式
GB/T 32918(所有部分) 信息安全技术 SM2椭圆曲线公钥密码算法
GB/T 35275-2017 信息安全技术 SM2密码算法加密签名消息语法规范
GM/T 0092 基于SM2算法的证书申请语法规范
GM/Z4001 密码术语
3 术语和定义
GM/Z4001界定的以及下列术语和定义适用于本文件。
3.1
客户端 client
申请证书服务的设备。
注:客户端也称请求端。
3.2
服务端 server
提供证书服务的实体,包含CA和RA。
3.3
数字信封 digitalenvelope
一种数据结构,包含用对称密钥加密的密文和用公钥加密的该对称密钥。
3.4
设备证书 devicecertificate
数字证书的一种,由CA签名的包含设备的基本信息、设备公钥信息及其他补充信息等的一种数据
结构。
3.5
SM2算法 SM2algorithm
由GB/T 32918(所有部分)定义的一种算法。
5.1.3 CA
CA是签发客户端证书的实体,CA的名字应出现在生成证书的签发者字段中。
在任何PKI操作发生之前,CA应获得一个符合GB/T 20518-2018配置的CA证书,这可以是上
级CA签发的CA证书。
客户端应通过7.1.1的获取CA证书请求消息得到CA证书,并将获取CA证书响应消息所得到的
CA证书通过证书杂凑值进行认证。
CA应在线回应证书查询请求或通过LDAP提供证书查询结果。
CA可实施任何策略并应用这些策略认证或拒绝客户端的请求。如果服务端已经为客户端签发过
证书,且该证书在当前仍然有效,服务端可返回之前为客户端创建的证书。
如果客户端在轮询一个挂起事务后进入超时状态,它应通过向服务端发送与证书注册事务名称、密
钥和事务ID相同的请求,来进行重新同步。CA应返回证书注册事务的状态,包括已发放的证书。CA
不应创建新事务,除非已注册的证书被撤销或超过有效期。
5.1.4 RA
RA是一种SCEP服务端,它对SCEP客户端进行认证和授权检查,同时将认证请求转发给CA。
在生成证书的签发者字段中应不出现RA的名称。
RA在通过7.1.2的获取CA证书响应消息返回证书时应同时返回RA证书和CA证书,此响应中
包括一个RA证书,说明该客户端正在通过一个RA向CA提出证书相关的请求,客户端在后续的安全
通信中应将指定该RA作为服务端通信。
为了进行认证服务,RA应将请求传递给CA服务端进行处理,CA与RA之间的通信协议在本文
件中不做规定。
5.2 客户端认证
为了按照GB/T 35275语法格式对数据进行加密和签名,客户端应有一个可用的本地证书。
a) 如果客户端已经有一个SCEP服务端签发的证书,且服务端支持更新,应使用该证书。
b) 如果客户端没有SCEP服务端CA签发的证书,但具有来自其他CA的证书,则应使用其他
CA签发的证书。在新CA上的策略设置将决定是否认可其他CA认证结果、是否为客户端
服务。
c) 如果客户端没有服务端CA签发的证书及来自备用CA的证书,应使用本地生成的基于SM2
算法的自签名证书替代。自签名证书应使用与GM/T 0092要求相同的主体名称。
在证书注册期间,客户端在遵循GB/T 35275进行签名时,应使用选定的证书。客户端发送请求
后,服务器端生成响应,在服务器端对响应进行加密时,需使用此签名证书的公钥。
5.3 注册认证
服务端可设置策略,对客户端的请求进行自动注册认证或手动注册认证。
在自动注册认证模式下,服务端应实现适当的逻辑,对客户端进行签名的证书进行自动认证,并使
用由认可的其他PKI层次体系中CA颁发的现有客户端凭证进行自动注册。
在手动注册认证模式下,客户端消息一直处于挂起状态,直到CA操作员对该消息进行确认或者
拒绝。
客户端生成GM/T 0092的申请消息的杂凑值,并使用其他可靠的带外传输方式发送给CA操作员。
CA操作员应将此杂凑值与在SCEP交互时收到消息后在本地生成的杂凑值进行比较,验证其完整性。
5.4 CA/RA证书分发
客户端如果以前没有获取CA/RA证书,则应在任何PKI操作启动之前申请获取CA/RA证书。
在客户端获取CA证书之后,应使用杂凑算法对接收到的CA证书(及可能含有的RA证书)计算
杂凑值,如果客户端没有到信任锚的证书路径,则通过将证书杂凑值与本地配置的、带外方式得到的信
息进行比较,来对CA证书进行身份认证。
由于客户端和CA/RA之间尚未交换公钥,因此无法按照GB/T 35275的语法格式来保护这些消
息,而数据将在明文中传输。
如果RA正在使用中,则按GB/T 35275中的SignedData类型格式返回一个数字信封,信封中或包
含RA和CA证书,或只有CA证书本身。传输协议应指明返回的是哪一个。
在客户端获取CA证书之后,应使用杂凑算法对接收到的CA证书(及可能含有的RA证书)计算
杂凑值,如果客户端没有到信任锚的证书路径,则通过将证书杂凑值与本地配置的、带外方式得到的信
息进行比较,来对CA证书进行身份认证。
由于从客户端到CA/RA之间传递查询可能耗费很长时间,而RA证书可能随时更改,因此建议客
户端不要存储RA证书,而应在每次操作之前检索CA/RA证书。
5.5 证书注册
客户端按照GM/T 0092创建一个证书请求来启动证书注册事务,并将其按照GB/T 35275封装后
发送到CA/RA。
如采用自动注册认证模式,CA/RA根据策略返回请求响应消息CertRep,状态设置为SUCCESS
或FAILURE。消息类型定义见6.2.2.3。
如采用手动注册认证模式,CA/RA返回的CertRep消息的状态设置为PENDING,则客户端应通
过定期向CA/RA发送获取证书轮询GetCertInitial来进入轮询模式,直到CA/RA操作员完成手动身
份验证,批准或拒绝该请求。
如果进入轮询模式,客户端应发送单个证书请求PKCSReq消息,后跟0个或多个GetCertInitial消
息。CA/RA将发送0个或多个CertRep消息,状态设置为PENDING,CA/RA最后发送一个CertRep
消息,状态为SUCCESS或FAILURE。
在证书注册期间,客户端状态转换在图2中表示。
图2 状态转换图
证书注册从状态CERT-NONEXISTANT开始。
发送PKCSReq消息会将状态更改为CERT-REQ-PENDING。如果没有响应,或无法发送,状态恢
复到CERT-NONEXISTANT。
接收到事务状态pkiStatus为SUCCESS的CertRep消息,将会把状态更改为CERT-ISSUED。
6.2.2.3 消息类型(messageType)
消息类型属性确定事务所执行操作的类型。这个属性应包含在所有的PKI消息中。如下消息类
型已被定义:
PKCSReq(19) GM/T 0092证书请求
CertRep(3) 请求响应
GetCertInitial(20) 证书轮询
GetCert(21) 证书查询
GetCRL(22) CRL查询
未定义的消息类型作为错误处理。
6.2.2.4 事务状态(pkiStatus)
所有的响应消息应包括事务状态信息,定义为pkiStatus:
SUCCESS(0) 批准
FAILURE(2) 拒绝,并提供6.2.2.5中定义的failInfo属性
PENDING(3) 待处理
未定义的消息类型作为错误处理。
6.2.2.5 失败信息(failInfo)
失败信息属性应包括下列失败原因:
badAlg(0) 不能识别或未被支持的算法标识
badMessageCheck(1) 完整性校验失败
badRequest(2) 事务未被允许或支持
badTime(3) 签名时间属性和系统时间不够接近
badCertId(4) 没有识别出可以匹配所提供标准的证书
未定义的消息类型作为错误处理。
6.2.2.6 发送者随机数和接受者随机数(senderNonce和recipientNonce)
发送者随机数senderNonce和接受者随机数recipientNonce是每个事务产生的16字节随机数。
用来抗重放攻击。
客户端应在发送给服务端的PKI消息中包含发送者随机数。
服务端应将发送者随机数复制到recipientNonce,客户端应校验recipientNonce。
签名时间属性指定签名者执行签名过程的时间,该属性可选。其定义可参考PKCS#9。
6.2.3 SCEP数字信封
SCEP消息的信息部分包含在EnvelopedData类型中,如GB/T 35275-2017第9章所述,有以下
限制:
a) encryptedContent应是被传送的SCEP消息,应和pkiMessage里的 mesaageType认证属性
匹配;
b) GB/T 35275使用消息接收方的公钥加密传输密钥。
6.3 SCEP消息类型
6.3.1 概述
SCEP消息的类型应是在messageType认证属性中指定。以下章条定义了有效的消息类型、对应
的消息数据格式,还有这个类型强制性的认证属性。
6.3.2 证书注册
这个类型的 MessageData域包含一个GM/T 0092证书请求,证书注册可包含GM/T 0092中定义
的任意域,同时应要包含至少以下几项:
---主体标识名;
---主体公钥;
---ChalengePassword属性,ChalengePassword可能被用来认证注册请求自身。
属性:
---事务标识属性transactionID;
---消息类型属性messageType,设置为PKCSReq;
---发送者随机数属性senderNonce。
正如6.2.3所描述的,这种消息类型的pkcsPKIEnvelope属性由接收者的公钥保护。
6.3.3 证书注册响应
6.3.3.1 概述
这种类型的messageData属性包含一个如6.4所示的简化的SignedData,回复所需要的确切内容
依赖于这个消息回复的请求类型,在表1和第4章有具体描述。
属性:
---事务标识属性transactionID:从请求消息中复制;
---消息类型属性messageType:设置为CertRep;
---发送者随机数属性senderNonce;
---接受者随机数属性recipientNonce:从申请消息的发送者随机数属性senderNonce复制得到;
---事务状态pkiStatus。
正如6.1.2所描述的,这种消息类型的pkcsPKIEnvelope属性由接收者的公钥保护。例如,如果一
个自签名证书用来发送请求,那么这个自签名证书的公钥就要用来加密SUCCESS回应的pkcsPKIEn-
velope属性的内容加密密钥。
SignedData数据中contentInfo字段存储了SM2加密证书私钥数据,其数据格式遵循GB/T 35275
书,第一个是签名证书,第二个是加密证书。
6.3.3.2 事务成功
当事务状态被设置为SUCCESS,这个消息的 messageData包含一个如6.4定义的简化的数字信
封,其内容取决于证书注册请求,如表2所示。
6.3.3.3 事务失败
当事务状态被设置为FAILURE,响应应包含一个failInfo属性,来描述失败的原因。pkcsPKIEn-
velope应省略。
6.3.3.4 事务待处理
当事务状态被设置为PENDING。pkcsPKIEnvelope应省略。
6.3.4 证书轮询
这种类型的messageData属性包含一个证书签发者与主体IssuerAndSubject。签发者被设置为证
书认证机构的issuerName,主体被设置为请求证书时使用的SubjectName。
属性:
---和PKCSReq消息中相同的事务标识属性transactionID;
---消息类型属性messageType,设置为GetCertInitial;
---一个senderNonce属性。
IssuerAndSubject类型的定义如下:
IssuerAndSubject::=SEQUENCE{
issuerName,
6.3.5 证书查询
中定义的,唯一确定了请求的证书。
属性:
---事务标识属性transactionID;
---消息类型属性messageType,设置为GetCert;
---发送者随机数属性senderNonce。
6.3.6 CRL查询
包含需要确认的证书发布者姓名和序列号。
属性:
---事务标识属性TransactionID;
---消息类型属性messageType,设置为GetCRL;
---发送者随机数属性senderNonce。
6.4 简化的SignedData数据类型
简化的SignedData数据类型是指GB/T 35275中签名数据类型SignedData的简化,其没有签名
者,只是为了传送证书和证书吊销列表。
在携带证书时,证书将包含在SignedData的certificates字段中。在携带CRL时,CRL将包含在
SignedData的crls字段中。
7 SCEP事务
7.1 获取CA证书
7.1.1 请求消息格式
为了得到CA证书,客户端发送一个GetCACert消息到服务端。此消息中没有相关数据。
7.1.2 响应消息格式
响应消息格式取决于服务端是否具有RA证书或只有一个CA证书,服务端应明确指定它发送的
是何种响应。
所有返回的证书格式应符合GB/T 20518-2018。
如果服务端就是CA证书认证机构,并且没有任何RA证书,那么响应由一个CA证书组成。
如果服务端具有RA证书,则响应消息就是一个简化的SignedData数据类型,其中只包含CA证
书和RA证书。
7.2 证书注册
7.2.1 请求消息格式
PKCSReq消息用于证书注册申请。
先决条件:客户端和CA认证机构都已经完成了初始化过程。客户端已经配置了CA/RA证书。
后置条件:客户端收到证书,请求可以被拒绝,或者请求待处理。待处理的响应可能表明需要人工
认证。
7.2.2 响应消息格式
响应消息应是一个服务端返回的CertRep消息,分为成功(SUCCESS)、失败(FAILURE)或待处理
(PENDING)三种状态。
如果请求被授予,返回一个事务状态为SUCCESS的CertRep消息,响应消息应包含签发的证书。
如果请求被拒绝,则返回一个事务状态为FAILURE的CertRep消息,响应消息应包含failInfo
属性。
如果CA配置为对客户端的验证为人工方式,则返回一个事务状态为PENDING的CertRep消息,
CA也可能因为其他原因返回PENDING。
7.3 证书轮询
7.3.1 请求消息格式
由事务状态为PENDING的CertRep触发,客户端将通过定期发送GetCertInitial状态查询请求到
服务端,从而进入轮询状态,直到请求被授予并且证书被发回,或者请求被拒绝,或者超过配置的轮询时
间限制(或最大轮询次数)。
由于GetCertInitial是注册的一部分,在轮询期间的消息交换应携带与前一个PKCSReq相同的业
务ID属性。服务端接收到一个与PKCSReq不匹配的GetCertInitial时,应忽略该请求。
由于此时证书尚未发出,客户端只能使用自己的主体名称(通过PKCSReq发送的,包含在GM/T 0092
格式中的证书注册请求)来识别轮询证书请求。因为来自一个客户端可以有多个未完成的请求(例如,
不同的密钥和不同的密钥用法将被用来请求多个证书),事务ID也应包括在内,以消除多个请求之间的
歧义。
先决条件:客户端已经收到一个事务状态为PENDING的CertRep消息。
后置条件:客户端已经收到了有效的回复,可以是有效的证书(事务状态为SUCCESS),也可以申
请失败(事务状态为FAILURE),或者轮询周期超时。
7.3.2 响应消息格式
GetCertInitial的响应消息与7.2.2中相同。
7.4 证书查询
7.4.1 请求消息格式
客户端可以通过签发者名称和待查询证书的证书序列号,从SCEP服务端查询签发的证书。此事
务不用于提供通用证目录服务。
此事务由客户端发送到服务端的一个GetCert消息,并从服务端得到一个CertRep消息作为响应。
先决条件:证书认证机构已发出客户端实体的证书,而签发者指定的序列号是已知的。
后置条件:成功应返回证书,或者请求被拒绝。
7.4.2 响应消息格式
在这种情况下,服务端上的CertRep与7.2.2相同,只是服务端返回状态只有SUCCESS和FAIL-
URE两种。
7.5 CRL查询
7.5.1 请求消息格式
客户端可以从SCEP服务端请求CRL。
先决条件:证书认证机构证书已下载到最终实体。
后置条件:将CRL发送回客户端。
7.5.2 响应消息格式
CRL被通过CertRep消息发送回客户端,此消息的信息部分是如6.4的一个简化的SignedData数
据类型,仅包含CRL。
7.6 获取下一个CA证书
7.6.1 请求消息格式
当CA证书即将过期时,客户端需要检索CA的即将启用的新CA证书。这是通过GetNextCACert消
息完成的,该消息没有相关请求数据。
7.6.2 响应消息格式
响应消息应由CA或RA签名,客户端应在接受其任何内容之前应先对签名进行验证,签名消息符
合GB/T 35275中的SignedData结构。
SignedData的内容是简化的,其中包含新的CA证书和可能存在的新的RA证书,如8.2.1中所
定义。
如果CA没有即将启用的新CA证书,则应拒绝该请求,并从功能中删除GetNextCACert设置,直
到其成功进行证书更新后再恢复设置。
如果此响应中有任何RA证书,客户端应检查这些RA证书是否由CA签名,并且应检查这些RA
证书的授权。
8 SCEP传输协议
8.1 HTTP消息格式
8.1.1 请求消息
SCEP使用HTTP“GET”消息实现传输协议。下面定义了从客户端发送到服务端HTTPGET消
息的语法。
"GET"CGI-PATHCGI-PROG"? operation="OPERATION"&message="MESSAGE
其中:
CGI-PATH定义了调用解析请求CGI程序的实际CGI路径。
CGI-RROG被设置为字符串“pkiclient.exe”。这是CA用来处理SCEP事务的程序。CA可忽略
CGI-RROG,只使用CGI-PATH。
OPERATION和 MESSAGE取决于具体SCEP事务,在以下各条中定义。
如果CA支持,则除GetCACert、GetNextCACert或GetCACaps之外,其他SCEP消息都可以不通
过HTTPGET,而通过HTTPPOST发送。在这种形式的消息中,不使用base64编码。
POST/cgi-bin/pkiclient.exe? operation=PKIOperationHTTP/1.0Content-Length:< lengthof
data >< binaryGB/T 35275data >
客户端可通过POSTPKIOperation功能来验证CA是否支持POST操作,按附录A进行。
8.1.2 响应消息
对于每个GET操作,CA/RA服务端应返回内容类型和适当的响应数据。
8.2 SCEP消息
8.2.1 获取CA证书
8.2.1.1 请求消息
OPERATION应设置为“GetCACert”。
MESSAGE可省略,也可能是表示证书认证机构签发者标识符的字符串。一个SCEP服务端可以
支持多个CA。
8.2.1.2 响应消息
客户端在注册期间,根据CA设置的策略与CA或RA通信。
a) CA证书响应
响应消息应具有“application/x-x509-ca-cert”的内容类型。
此响应消息的正文仅由CA证书组成,如7.1.2中所定义。
"Content-Type:application/x-x509-ca-cert\n\n"< binaryX.509 >
b) CA和RA证书响应
响应消息应具有“application/x-x509-ca-ra-cert”的内容类型。
此响应消息的正文由一个简化的数字信封组成,如7.1.2中所定义。
"Content-Type:application/x-x509-ca-ra-cert\n\n"< binaryGB/T 35275 >
8.2.2 证书注册
8.2.2.1 请求消息
OPERATION应设置为“PKIOperation”。
MESSAGE应设置为 PKCSReq消息。该消息应按 base64 编码。“base64”编码的数据与
“base64url”编码的数据不同,可能包含URI保留字符,因此应进行转义。
8.2.2.2 响应消息
响应消息......
|