境内外币支付系统 签名核签API使用手册
V1.1
中国人民银行科技司二00八年一月
目录
1编写目的4
2电子签名安全机制在境内外币支付系统中的应用4
2.1电子签名证书42.2端对端的签名4 2.3电子签名与核签的流程42.4发起方签名的步骤52.5接收方验签名的步骤 5
3签名核签函数应用接口(C版本)6
3.2.1定义3.2.2功能 63.2.4错误代码表6 3.2.3输入参数3.2.5说明 6
3.3释放证书应用环境7
3.3.1定义 3.3.2功能 73.3.3参数 7 7
3.4数字摘要7
3.4.1定义3.4.3参数 3.4.2 功能 73.4.4错误代码表73.4.5说明 7
3.5不带原文签名8 3.5.1定义3.5.2功能 8 83.5.3参数3.5.4错误代码表83.5.5说明 8
3.6验证不带原文的签名
3.6.1定义 83.6.2功能 83.6.3参数 83.6.4错误代码表9
3.7通过CRL文件验证证书9
3.7.1定义 93.7.2功能 93.7.3参数 3.7.4错误代码表9 9
3.8证书DN属性获取103.8.1定义 01
3.8.2 功能3.8.3参数 01 013.8.4错误码列表103.8.5说明 01
3.9证书SN属性获取 01
3.9.1定义 013.9.2 功能 013.9.3参数 113.9.4错误码列表11 3.9.5说明11
3.10证书有效期起始日期获取11
3.10.1定义 113.10.2功能3.10.4错误码列表11 3.10.3参数
3.11证书有效期终止日期获取12
3.11.1定义123.11.2 功能 3.11.3参数 123.11.4错误码列表12
3.12PFX证书密码修改 12
3.12.1定义123.12.2功能12 3.12.3 参数3.12.4错误码列表12
1编写目的
本文档介绍境内外币支付系统中的签名与核签机制,指导开发人员利用相关的API进行开发,实现发起清算行对发起的外币支付业务报文进行电子签名,FXCC和接收清算行对接收的外币支付业务报文进行核验签名的操作.
2电子签名安全机制在境内外币支付系统中的应用
境内外币支付系统采用了基于公钥基础设施(简称PKI)的电子签名来保证业务数据的完整性和不可抵赖性.参与境内外币支付系统的参与者需要向证书注册发放部门申请签名证书,发起支签业务报文进行验签.境内外币支付系统采用中国金融认证中心(以下简称CFCA)制作的电子签名 付业务等需要加签名的业务时,需要对业务报文进行签名,接收支付业务等加签业务时,需要对加证书.
2.1电子签名证书
参与境内外币支付系统的直接(特许)参与者通过申请获得电子签名证书,直接(特许)参与者以及所属的间接参与者发起的业务必须使用直接(特许)参与者的数字证书进行加签.该证书以文件形式(*pfx)(适用直联参与者)或者USBKey介质(适用间联参与者)存储.电子签名证书中包括了参与者的私钥与公钥,证书的公钥可以公开给其他参与者,用于核验签名:证书的私钥由证书者保有,私钥用于进行电子签名.证书的私钥通过私钥保护加以保护.用户需要使用电子 签名证书的私钥进行签名的时候,必须提供私钥保护密码进行核验,私钥保护密码核验通过的方可以使用该证书的私钥进行签名.证书的初始私钥保护密码由用户在申请得到证书时设置,私钥保护密码可以通过API进行修改.
为该业务报文由证书者发出,不可抵赖. 在境内外币支付系统中,通过证书的私钥签名,以证书的公钥核验通过的业务报文都认
2.2端对端的签名
在境内外币支付系统中,签名与核签采用发起直接(特许)参与者与接收直接(特许)参与者之间端对端的签名、核签方式.一笔支付业务(FMT100/101/102/103/104/200/201/202/203/204) 或者其他需要签名的业务报文只在发起业务时进行签名,在境内外币支付系统的各个节点处进行核签.FXCC不修改该业务报文中的签名.端对端方式保证业务由谁发起就由谁签名,不可抵赖,不被募改.
2.3电子签名与核签的流程
举例直接参与者A往直接参与者B发送一笔外币支付业务报文(FMT100).如图2-1所示,A行利用自己电子签名证书中的私钥对报文中的签名要素(第3块:用户头块、第4块:正文块)进行签名,将签名串附加到报文的第6块:签名块中一起进入境内外币支付系统.B行收到报文以后,从4块:正文块)对报文中的签名进行核验. 报文中将签名串取出来,在签名串中可以提取出A行的公钥,使用签名要素(第3块:用户头块、第
图2-1:电子签名与核签流程图
2.4发起方签名的步骤
(1)发送方(发起行行内系统)准备要签名要素组成的字符串(根据报文格式标准要求组织第3块:用户头块、第4块:正文块):
(2)发送方调用初始化API函数CFCA_InitCertAppContext(char *pfxFileName,char*privateKeyPassword,HCFCAToolkit *toolkitHandle)对应用环境进行初始化,这里需要传入发起方证书的文件路径以及该证书私钥保护密码(签名需要使用发送者的私钥,私钥受私钥保护密码保护):
*dateAfter,HCFCAToolkit toolkitHandle)来获得证书的有效期,与系统的当前时间进行比较, (3)发送方调用证书有效期终止时间获取API函数CFCA_GetCertificateToDate(long如果证书过期,则操作终止,系统提示该证书不可用.在证书到期前一段时间内(如3个月),提醒操作员注意,让其去RA进行证书更新操作,取得新证书,同时继续以下步骤:
(4)发送方调用签名API 函数CFCA_SignDataDetached(char* message,longmessageLength char *signature int *signaturelength HCFCAToolkit toolkitHandle) 对 原始数据进行签名,产生的签名字符串长度一般为1731字节(987字节的公钥证书,20字节的hash摘要值,以及大概300个字节的算法标识等),报文设计为1789字节(73x[78x]0-22):
特别注意:当需要组织FMT024数字签名查复报文时,得到的签名串在放入“数字签名内容”F90 (5)发送方将签名字符串组到报文对应的位置中(第6块:签名块),发送或者存储报文:字段前必须将签名串最后的一个去掉后才能放入F90字段.
(6)发送方释放证书应用环境CFCA_ReleaseCertAppContext(HCFCAToolkittoolkitHandle) .
2.5接收方验签名的步骤
(1)接收方(接收行行内系统)从FXCC接收报文后,由行内系统进行处理:
(2)接收方调用 API函数 CFCA_InitCertAppContext (char *pfxFileName,char*privateKeyPassword,HCFCAToolkit *toolkitHandle)对应用环境进行初始化,调用该API时, pfxFi 1eName 和 privateKeyPassword 都为 NULL;
(3)接收方调用核签API 函数CFCA_VerifySignedDataDetached(char *signature,long signatureLength char* originalData int *originalDatalLength char