2卫生系统数字证书应用集成规范(试行1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2卫⽣系统数字证书应⽤集成规范(试⾏1)
卫⽣系统数字证书应⽤集成规范
(试⾏)
卫⽣部办公厅
卫⽣部统计信息中⼼
⼆○○九年六⽉
⽬录
第1章概述 (1)
1.1范围 (1)
1.2规范性引⽂ (1)
1.3术语和定义 (1)
第2章总体技术框架 (2)
第3章统⼀证书应⽤接⼝ (3)
3.1证书介质应⽤接⼝ (3)
3.2密码设备应⽤接⼝ (3)
3.3通⽤密码接⼝ (3)
3.4客户端控件接⼝ (3)
3.4.1概述 (3)
3.4.2控件接⼝函数 (4)
3.5服务端组件接⼝ (21)
3.5.1概述 (21)
3.5.2COM组件接⼝ (21)
3.5.3Java组件接⼝ (41)
第4章附录 (63)
4.1典型证书应⽤部署模式 (63)
4.2证书登录认证集成范例 (64)
4.2.1证书登录认证流程 (64)
4.2.2数据库改造 (65)
4.3页⾯签名加密集成范例 (65)
4.3.1页⾯签名加密流程 (65)
4.3.2数据库改造 (66)
第1章概述
1.1范围
本规范制定了卫⽣系统数字证书应⽤技术框架,规范了卫⽣体系统⼀证书应⽤接⼝规范和证书应⽤集成部署实施规范。
本规范适⽤于指导卫⽣系统内实现证书应⽤集成实施⼯作,指导为卫⽣系统提供证书应⽤的安全⼚家开发统⼀的证书应⽤接
⼝,在卫⽣系统内实现基于数字证书的证书登录、电⼦签名与验证、加密解密等安全功能。
1.2规范性引⽂
下列标准所包含的条⽂,通过本规范中的引⽤⽽构成本规范的条⽂。
考虑到标准的修订,使⽤本规范时,应研究使⽤下列标准最新版本的可能性。
公钥密码基础设施应⽤技术体系框架规范
公钥密码基础设施应⽤技术体系密码设备应⽤接⼝规范
公钥密码基础设施应⽤技术体系通⽤密码服务接⼝规范
智能IC卡及智能密码钥匙密码应⽤接⼝规范
1.3术语和定义
以下术语和定义适⽤于本规范。
1.3.1 数字证书digital certificate
由权威认证机构进⾏数字签名的包含公开密钥拥有者信息、公开密钥、签发者信息、有效期以及⼀些扩展信息的数字⽂件。
1.3.2 数字证书介质certificate entity
⽤于存储密钥和数字证书并具有密码运算功能的载体,包括智能密码钥匙(UsbKey)、智能IC卡等密码设备。
第2章总体技术框架
数字证书应⽤集成的总体技术框架如图1所⽰:
图1数字证书应⽤集成总体技术框架图
根据总体结构图,实现数字证书应⽤集成的总体技术框架包括:密码设备和统⼀证书应⽤接⼝组成。
密码设备包括:加密机、加密卡、USBKey、智能IC等,是数字证书应⽤⽀撑体系的硬件基础。
⼀般情况下,加密机⽤于服务器端,USBKey⽤于客户端。
统⼀证书应⽤接⼝包括:证书介质应⽤接⼝、密码设备应⽤接⼝、通⽤密码服务接⼝、客户端控件接⼝和服务器端组件接⼝等模块组成。
统⼀证书应⽤接⼝位于应⽤系统和密码设备之间,它是数字证书应⽤⽀撑体系的软件基础。
统⼀证书应⽤接⼝为上层的证书应⽤系统提供简洁、易⽤的调⽤接⼝,实现⾝份认证、实现信息的保密性、完整性和不可否认性等功能。
统⼀证书应⽤接⼝屏蔽了各类密码设备(加密机和USB KEY等)的设备差异性,屏蔽了各类密码设备的密码应⽤接⼝之间的差异性,实现应⽤与密码设备⽆关性,可简化应⽤开发的复杂性。
第3章统⼀证书应⽤接⼝
3.1证书介质应⽤接⼝
证书介质应⽤接⼝是客户端证书介质(如:USBKey)的底层应⽤接⼝,该接⼝应在符合CSP技术规范的同时,符合《智能IC 卡及智能密码钥匙密码应⽤接⼝规范》。
证书介质应⽤接⼝适⽤于USBKey等终端密码设备上,应⽀持WindowsXP、Windows2000、Windows2003、Vista、Linux等操作终端类的主流操作系统。
3.2密码设备应⽤接⼝
密码设备应⽤接⼝是服务器端密码设备(如加密机)的底层应⽤接⼝,该接⼝应在符合国际标准PKCS#11技术规范的基础上,符合《公钥密码基础设施应⽤技术体系密码设备应⽤接⼝规范》。
密码设备应⽤接⼝适⽤于加密机等服务器的密码设备上,应⽀持Windows、Linux、Unix、AIX、Solaris等服务器类的主流操作系统。
3.3通⽤密码接⼝
通⽤密码接⼝是屏蔽了底层不同密码设备类型和底层接⼝的通⽤中间件,该接⼝要符合《公钥密码基础设施应⽤技术体系通⽤密码服务接⼝规》。
通⽤密码接⼝适⽤于客户端和服务器端使⽤,应⽀持Windows、Linux、Unix、AIX、Solaris等所有主流操作系统。
3.4客户端控件接⼝
3.4.1概述
客户端控件接⼝是供卫⽣体系业务系统直接调⽤的⾼级接⼝,适⽤于客户端程序使⽤,应⽀持WindowsXP、Windows2000、Windows2003、Vista、Linux 等操作终端类的主流操作系统。
客户端控件接⼝可以是DLL动态库、ActiveX控件、Applet插件等形态,以⽀持B/S和C/S等架构的应⽤系统。
客户端控件接⼝的功能与服务器端组件接⼝向对应,应⽀持不同CA机构签发的符合《卫⽣系统数字证书格式规范》的数字证书,客户端应可⾃动识别符合《卫⽣系统介质规范》的证书介质,在卫⽣系统服务器端配置的信任列表范围内,实现不同CA 机构证书之间的交叉认证和互信互认。
客户端控件接⼝的主要功能函数应包括:配置管理、数字证书解析、签名与验证、数据加密与解密、PKCS#7数据信封、XML 数据的签名与验证、⽂件签名与加密等。
3.4.2控件接⼝函数
客户端提供ActiveX控件形态的⽂件,说明如下:
1)事件说明
2)设置证书应⽤策略SetCertAppPolicy
●功能:
设置证书应⽤策略。
⽀持“MS”。
“MS”:使⽤微软的证书存储规范,即csp规范,读取、使⽤证书。
●函数原型:
Void SetCertAppPolicy (BSTR AppPolicy);
参数:⽆
●返回:⽆
●
3)设置签名算法SetSignMethod
●功能:
设置控件签名使⽤的签名算法。
如果不调⽤此函数,控件缺省为“RSA-SHA1”。
●函数原型:
Void SetSignMethod (BSTR SignMethod);
●参数:
SignMethod
[IN],签名算法。
⽀持的有:“RSA-SHA1”、“RSA-MD5”、“RSA-MD2”
●返回:
⽆
4)获得当前签名算法GetSignMethod
●功能:
获得控件签名使⽤的签名算法。
●函数原型:
BSTR GetSignMethod ();
●参数:
⽆
●返回:
当前的签名算法。
5)设置加密算法SetEncryptMethod
●功能:
设置控件使⽤的对称加解密算法。
如果不调⽤此函数,控件缺省为“T-DES”。
●函数原型:
Void SetEncryptMethod (BSTR EncryptMethod);
参数:
●SetEncryptMethod [IN],对称加解密算法。
⽀持的有:
“DES”:(8字节)
“T-DES2KEY”(16字节)
“T-DES”(24字节)
“SSF33”(16字节)
“AES-128”(16字节)
“AES-192”(24字节)
“AES-256” 32字节
●返回:
⽆
6)获得加密算法GetEncryptMethod
●功能:
获得控件使⽤的对称加解密算法。
●函数原型:
BSTR GetEncryptMethod ();
●参数:
⽆
●返回:
当前控件使⽤的加密算法。
7)获得证书列表GetUserList
●功能:
取得当前已安装证书的⽤户列表。
●函数原型:
BSTR GetUserList();
●参数:⽆
●返回:
BSTR ret ⽤户列表字符串,
格式:(⽤户名1||证书标识1&&&⽤户名2||证书标识&&&…)
●备注:
根据证书应⽤的策略不同会得到不同的证书列表。
8)导出⽤户证书ExportUserCert
●功能:
根据证书惟⼀标识,获取Base64编码的证书字符串。
●函数原型:
BSTR ExportUserCert(BSTR CertID);
●参数:
输⼊参数,BSTR CertID:证书惟⼀标识
●返回值:
BSTR rv:证书字符串。
出错返回空值。
9)导出⽤户证书ExportExChangeUserCert
●功能:
根据证书惟⼀标识,获取Base64编码的证书字符串。
指定获取加密(交换)证书。
●函数原型:
BSTR ExportExChangeUserCert (BSTR CertID);
●参数:
输⼊参数,BSTR CertID:证书惟⼀标识
●返回值:
BSTR rv:证书字符串。
出错返回空值。
●
10)获得证书信息GetCertInfo
●功能:
获取证书信息
●函数原型:
BSTR GetCertInfo(BSTR Cert, short Type);
●参数:
输⼊参数:BSTR sCert:Base64编码的证书
输⼊参数:short Type:获取信息的类型
●根据type获得证书信息
●
11)获得证书扩展信息GetCertInfoByOid
●功能:
根据OID获取证书私有扩展项信息
●函数原型:
BSTR GetCertInfoByOid(BSTR Cert, BSTR Oid);
●参数:
输⼊参数:BSTR sCert:Base64编码的证书
输⼊参数:BSTR oid:私有扩展对象ID,⽐如“1.2.18.21.88.2”
●返回:
BSTR ret::证书OID对应的值。
12)获得⽤户信息GetUserInfo
●功能:
获得⽤户信息。
●函数原型:
BSTR GetUserInfo (BSTR CertId, short type);
●参数:
输⼊参数:BSTR Certid:证书标识。
输⼊参数:type:类别。
●返回:
BSTR ret::type对应的值。
出错返回空值。
13)验证证书有效性validateCert
●功能:
验证证书有效性
●函数原型:
boolean ValidateCert(BSTR Cert);
●参数:
输⼊参数:BSTR sCert:Base64编码的证书●返回:成功返回true,否则返回false。
●
14)数据签名SignData
●功能:
对字符串数据进⾏数字签名,签名格式为Pkcs#1。
●函数原型:
BSTR SignData(BSTR CertID, BSTR InData);
●参数:
输⼊参数:BSTR sCertID:证书标识
输⼊参数:BSTR sInData :签名原⽂
●返回:
BSTR ret 签名结果。
15)验证签名VerifySignedData
●功能:
验证数字签名
●函数原型:
boolean VerifySignedData(BSTR Cert, BSTR InData, BSTR SignValue);
●参数:
输⼊参数:BSTR sCert:签名者证书
输⼊参数:BSTR sInData :签名原⽂
输⼊参数:BSTR sSignValue:签名值
●返回:
成功返回true,否则返回false。
●
16)⽂件签名SignFile
●功能:
对⽂件数字签名
●函数原型:
BSTR SignFile(BSTR CertID, BSTR InFile);
●参数:
输⼊参数:BSTR sCertID:证书标识
输⼊参数:BSTR sInFile :签名原⽂⽂件路径
●返回:
BSTR ret 签名结果。
出错返回空值。
17)验证⽂件签名VerifySignedFile
●功能:
验证⽂件数字签名
●函数原型:
boolean VerifySignedFile(BSTR Cert, BSTR InFile, BSTR SignValue);
●参数:
输⼊参数:BSTR sCert:签名者证书
输⼊参数:BSTR sInFile :签名原⽂⽂件路径
输⼊参数:BSTR sSignValue:签名值
●返回:
成功返回true,否则返回false。
●数据项描述
18)加密数据EncryptData
●功能:
使⽤对称算法加密数据
●函数原型:
BSTR EncryptData(BSTR SymmKey, BSTR Indata);
●参数:
输⼊参数:BSTR sKey,加密密钥
输⼊参数:BSTR sIndata,待加密的明⽂
●返回值:
BSTR rv:加密后的密⽂。
19)解密数据DecryptData
●功能:
使⽤对称算法解密数据
●函数原型:
BSTR DecryptData(BSTR SymmKey, BSTR Indata);
●参数:
输⼊参数:BSTR SymmKey,解密密钥
输⼊参数:BSTR sIndata,待解密的密⽂
●返回值:
BSTR rv:解密后的明⽂。
●
20)⽂件加密EncryptFile
●功能:
使⽤对称算法加密⽂件
●函数原型:
boolean EncryptFile(BSTR SymmKey, BSTR InFile, BSTR OutFile);
●参数:
输⼊参数:BSTR SymmKey,加密密钥
输⼊参数:BSTR InFile,待加密的明⽂⽂件路径
输⼊参数:BSTR OutFile,密⽂⽂件保存路径
●返回值:
成功返回true,否则返回false。
●
21)⽂件解密DecryptFile
●功能:
使⽤对称算法解密⽂件
●函数原型:
boolean DecryptFile(BSTR SymmKey, BSTR InFile, BSTR OutFile);
●参数:
输⼊参数:BSTR SymmKey,解密密钥
输⼊参数:BSTR InFile,待解密的密⽂⽂件路径
输⼊参数:BSTR OutFile,明⽂⽂件保存路径
●返回值:
成功返回true,否则返回false。
●
22)公钥加密PubKeyEncrypt
●功能:
使⽤证书对数据加密。
(Pkcs#1格式)
●函数原型:
BSTR PubKeyEncrypt(BSTR Cert, BSTR InData);
●参数:
输⼊参数:BSTR Cert,证书
输⼊参数:BSTR InData,待加密的数据。
●返回值:
BSTR rv,成功返回加密后的密⽂。
否则返回空。
23)私钥解密PriKeyDecrypt
●功能:
私钥解密(Pkcs#1格式)
●函数原型:
BSTR PriKeyDecrypt(BSTR CertID, BSTR InData);
●参数:
输⼊参数:BSTR CertID,证书ID
输⼊参数:BSTR InData,待解密的数据。
●返回值:
BSTR rv,成功返回解密后的明⽂。
否则返回空。
24)P7数据签名SignDataByP7
●功能:
对字符串数据进⾏数字签名,签名格式为Pkcs7。
●函数原型:
BSTR SignDataByP7 (BSTR CertID, BSTR InData);
●参数:
输⼊参数:BSTR sCertID:证书标识
输⼊参数:BSTR sInData :签名原⽂
●返回:
BSTR ret 签名结果。
出错返回空值。
25)验证签名VerifySignedDataByP7
●功能:
验证数字签名
●函数原型:
boolean VerifySignedDatabyP7( BSTR P7Data);
●参数:
输⼊参数:BSTR P7Data :p7签名包。
●返回:
成功返回true,否则返回false。
26)解析P7签名包信息GetP7SignDataInfo
●功能:
解析p7签名包的信息,可获得原⽂、签名值、签名证书等信息。
●函数原型:
BSTR GetP7SignDataInfo ( BSTR P7Data ,short type);
●参数:
输⼊参数:BSTR P7Data :p7签名包。
输⼊参数:short type:类型。
1:原⽂
2:签名者证书
3:签名值
●返回:
成功返回true,否则返回false。
27)XML数据签名SignDataXML
●功能:
对XML数据进⾏数字签名,输出符合国际标准的XML签名结果。
●函数原型:
BSTR SignDataXML(BSTR CertID, BSTR InData);
●参数:
输⼊参数:BSTR sCertID:证书标识
输⼊参数:BSTR InData :签名原⽂,XML格式。
●返回:
BSTR ret 签名结果。
出错返回空值。
28)验证XML数据签名verifySignedDataXML
●功能:
验证xml签名。
●函数原型:
boolean verifySignedDataXML (BSTR InData);
●参数:
输⼊参数:BSTR InData :XML签名值.
●返回:
成功返回true,否则返回false。
29)解析XML签名数据getXMLSignatureInfo
●功能:
解析XML签名数据,获取签名值、XML原⽂、证书等信息。
●函数原型:
BSTR getXMLSignatureInfo (BSTR XMLSignedData,short type);
●参数:
BSTR XMLSignedData XML格式的签名数据
●Type:待解析的参数类型。
可选的参数和意义:
1:xml原⽂
2:摘要
3:签名值
4:签名证书
5:摘要算法
6:签名算法
●返回值:
各项对应的信息。
30)拆分秘密SecretSegment
●功能:
门限算法,拆分秘密。
●函数原型:
BSTR SecretSegment(BSTR Secert, short m, short n, short k);
●参数:
输⼊参数:BSTR sSecert:待拆分的秘密(Base64编码后的)
输⼊参数:int m :秘密分割份额输⼊参数,int n :秘密恢复最⼩份额
输⼊参数:int k :设置为恢复秘密时的必选⽚段的个数。
(此参数可选,不设置标识任意n 份⽚段均可恢复秘密)。
●返回值:
BSTR rv :拆分后的密码(Base64编码)。
共m 份,以&&&相连。
例
如“1111111111111&&&222222222&&&33333333&&&444444444&&&”。
出错返回空值。
若有必选⽚段,则前k 份为必选。
●
31) 秘密恢复SecretRecovery
●
功能:
门限算法,恢复秘密。
●函数原型:
BSTR SecretRecovery(BSTR Seg); ●参数:
输⼊参数:BSTR Seg :密钥⽚段。
以“&&&”相连的n 段密钥⽚段。
●返回值:
BSTR rv :恢复后的秘密。
出错返回空值。
32) 添加待处理的⽂件AddFile
●
功能:
针对多个⽂件或数据处理,添加待处理的⽂件。
●
函数原型:
boolean AddFile(BSTR FilePath); ●
参数:
输⼊参数,BSTR FilePath :⽂件路径。
●
返回值:
boolean,成功返回true,否则返回false。
33)添加待处理的数据AddString
●功能:
针对多个⽂件或数据处理,添加待处理的字符串。
●函数原型:
boolean AddString(BSTR Indata);
●参数:
输⼊参数,BSTR sIndata:字符串
●返回值:
boolean,成功返回true,否则返回false。
34)清除⽂件和字符串Clear
功能:
●清除添加的⽂件和字符串
函数原型:
void Clear();
●参数:⽆
●返回值:⽆
35)开始对多个⽂件或数据签名SignUpdate
●功能:
开始对多个⽂件或数据签名。
先对⽂件签名后对字符串签名。
对⽂件签名的顺序按照AddFile的顺序,对字符串签名的顺序对AddString的顺序。
此函数⽴即返回,签名计算完毕后激活控件WorkDone事件。
●函数原型:
boolean SignUpdate(BSTR CertID);
●参数:
输⼊参数,BSTR CertID:证书标识。
●返回值:
成功返回true,否则返回false。