1、 文档编号XX_应急_密码平台差错处理版 本 号V1.0密 级秘密应急_密码平台差错处理XXX信息技术有限公司版本控制编号修订人修订时间版本号修订内容说明23第 22 页 共 22 页目录1.报文格式41.1请求报文格式41.2响应报文格式41.3报文正文格式52分析日志52.1分析用户日志52.1.1正确日志分析62.1.2错误日志分析72.2分析平台日志102.2.1正确日志分析102.2.2错误日志分析122.3编写目的142.4背景142.5定义142.6参考资料15附录一:密码平台常用错误代码15附录二:加密机错误代码221.报文格式1.1 请求报文格式应用系统和密码服务系统之间的请
2、求报文采用以下格式:2字节报文长度 + 2字节应用编号 + 3字节服务代码 + 1字节请求/响应标识 + 报文正文 其中,2字节报文长度是16进制数,比如长度258表示为:0x01 0x02。2字节应用编号,由应用系统和密码服务系统“协商”确定。3字节服务代码,是3位数字,标识了报文功能。1字节请求/响应标识,固定为1。1.2 响应报文格式应用系统和密码服务系统之间的响应报文采用以下格式:2字节报文长度 + 2字节应用编号 + 3字节服务代码 + 1字节请求/响应标识 + 2字节错误码 + 报文正文 其中,2字节报文长度是16进制数,比如长度258表示为:0x01 0x02。2字节应用编号,与
3、请求报文相同。3字节服务代码,是3位数字,标识了报文功能,与请求报文相同。1字节请求/响应标识,固定为0。2字节错误码,“00”表示功能正确执行,(此时后边填充0000)此时有报文正文,否则表示功能执行有错误,是错误代码,此时无报文正文。1.3 报文正文格式报文正文,长度可变,其格式为:3位报文域数量+报文域1+报文域2+每个报文域的格式如下:3位域标识号+域数据长度+域数据。示例,以下是一段报文正文:002001001101.1001.zpk0210004ABCD对这段报文的分析,参见说明说明1:起始的002是报文的域数目;说明2:红色部分是报文的域1起始001是域标识,001表示密钥名称。
4、其后的0011,是域数据的长度。其后的01.1001.zpk,是域的数据值说明3:蓝色部分是报文的域2起始021是域标识,021表示MAC数据其后的0004,是域数据的长度。其后的ABCD是MAC数据值2 分析日志2.1 分析用户日志每个应用都会在应用指定目录记录日志,记录日志名为unionlog.log,日志目录由应用指定。Unionlog.log会严格按照报文格式记录日志2.1.1 正确日志分析以下以unionlog.log中的一段返回正确的日志进行分析20100203152450:lenOfReqStr=0063reqStr=TT30210020010032POS.04221210701
5、1001_88888888.zak02100080000000020100203152450:lenOfResStr=0038resStr=TT30200000000010220016A95172EB1A2BC5452.1.1.1 请求报文日志其中20100203152450:lenOfReqStr=0063reqStr=TT30210020010032POS.042212107011001_88888888.zak021000800000000为请求报文日志20100203152450:表示发送包的时间lenOfReqStr=0063:表示发送包的长度reqStr=TT30210020010
6、032POS.042212107011001_88888888.zak021000800000000:表示请求的报文TT:应用标示号(AIX环境在.profile中配置,JAVA环境在构造函数设置)302:服务代码(表示使用指定的密钥生成MAC 302)1:请求响应标示0020010032POS.042212107011001_88888888.zak021000800000000:报文正文报文正文分解如下:002:域数目001:报文域10032:报文域1长度POS.042212107011001_88888888.zak:报文域1值021:报文域20008:报文域2长度00000000:报文
7、域2值2.1.1.2 响应报文日志其中20100203152450:lenOfResStr=0038resStr=TT30200000000010220016A95172EB1A2BC545为响应报文日志20100203152450:为接收到响应报文的时间lenOfResStr=0038:表示响应报文长度resStr=TT30200000000010220016A95172EB1A2BC545:表示响应报文TT:应用标示号302:服务代码(表示使用指定的密钥生成MAC 302)0:响应标识,固定为0。00:错误码,表示正确返回,如果为其他表示错误0000 :填充0010220016 A9517
8、2EB1A2BC545:为报文正文001:域数目022:报文域10016:报文域长度A95172EB1A2BC545:报文域2值2.1.2 错误日志分析以下以unionlog.log分析一段返回错误的日志例:20100203155700:lenOfReqStr=0062reqStr=TT30210020010031POS.042212107011001_8888888.zak02100080000000020100203155700:lenOfResStr=0042resStr=TT3020-110010019990020在密钥库中找不到密钥20100203155700 User Define
9、d Error: in UnionCommWithHsmSvrForThread: ret from server = -1100120100203155700 User Defined Error: in UnionCommWithHsmSvrForThread: lenOfReqStr=0062reqStr=TT30210020010031POS.042212107011001_8888888.zak02100080000000020100203155700 User Defined Error: in UnionCommWithHsmSvrForThread: lenOfResStr=0
10、042resStr=TT3020-110010019990020在密钥库中找不到密钥20100203155700 User Defined Error: in UnionGenerateMac: UnionCommWithHsmSvrForThread!2.1.2.1 请求报文日志其中20100203155700:lenOfReqStr=0062reqStr=TT30210020010031POS.042212107011001_8888888.zak021000800000000为请求报文日志20100203155700:表示发送包的时间lenOfReqStr=0062:表示发送包的长度re
11、qStr=TT30210020010031POS.042212107011001_8888888.zak021000800000000:表示请求的报文TT:应用标示号(AIX环境在.profile中配置,JAVA环境在构造函数设置)302:服务代码(表示使用指定的密钥生成MAC 302)1:请求响应标示0020010031POS.042212107011001_8888888.zak021000800000000:报文正文报文正文分解如下:002:域数目001:报文域10031:报文域1长度POS.042212107011001_8888888.zak:报文域1值021:报文域20008:报文
12、域2长度00000000:报文域2值2.1.2.2 响应报文日志其中20100203155700:lenOfResStr=0042resStr=TT3020-110010019990020在密钥库中找不到密钥为响应报文日志,其他为打印出来的错误日志,如下20100203155700 User Defined Error: in UnionCommWithHsmSvrForThread: ret from server = -1100120100203155700 User Defined Error: in UnionCommWithHsmSvrForThread: lenOfReqStr=0
13、062reqStr=TT30210020010031POS.042212107011001_8888888.zak02100080000000020100203155700 User Defined Error: in UnionCommWithHsmSvrForThread: lenOfResStr=0042resStr=TT3020-110010019990020在密钥库中找不到密钥20100203155700 User Defined Error: in UnionGenerateMac: UnionCommWithHsmSvrForThread!20100203155700:为接收到响
14、应报文的时间lenOfResStr=0042:表示响应报文长度r resStr=TT3020-110010019990020在密钥库中找不到密钥:表示响应报文TT:应用标示号302:服务代码(表示使用指定的密钥生成MAC 302)0:响应标识,固定为0。-11001:错误码,错误码为“-”+“5位的错误代码 ”0019990020在密钥库中找不到密钥:错误信息平台错误代码参见附录一2.2 分析平台日志针对每个应用系统都有唯一的标示,在密码平台将会独立记录日志,日志命名以hsmTask_XX.log命名,XX标示系统标示号。如理财系统对应得日志为hsmTask-LC.log。日志所在位于/uni
15、on/Rec/log目录下。2.2.1 正确日志分析以应用表示为TT的日志分析为例,以下为hsmTask_TT.log中的日志* Security Service Begin *20100203152450:00778514:after unpack TT3021:20100203152450:00778514:Request fldNum = 000220100203152450:00778514:001 0032 POS.042212107011001_88888888.zak20100203152450:00778514:021 0008 0000000020100203152450:0
16、0778514:139.1.99.15:0320050MS011017F759A8C54817BF89781E7DB7F576BA00080000000020100203152450:00778514:139.1.99.15:0320020MT00A95172EB1A2BC54520100203152450:00778514:before pack TT3020000000:20100203152450:00778514:Response fldNum = 000120100203152450:00778514:022 0016 A95172EB1A2BC545* Security Servi
17、ce End *分析如下:20100203152450:00778514:after unpack TT3021:可以看出服务为302服务,可以根据0201 20071025 安全服务协议.doc文档中查找到302服务为计算MAC,服务报文如下:20100203152450:00778514:Request fldNum = 0002根据Request fldNum = 0002可以看出该报文有2个域,见以上报文协议,该服务应该包含2个域,001域及021域20100203152450:00778514:001 0032 POS.042212107011001_88888888.zak表示报文
18、域1相关信息。001:报文域1,和报文协议中对应0032:报文域1的长度,和“POS.042212107011001_88888888.zak”的长度对应POS.042212107011001_88888888.zak:报文域1的值,该处应该填写密钥名称,从报文格式中也可看出。20100203152450:00778514:021 0008 00000000表示报文域2相关信息021:报文域2,和报文协议中对应0008:报文域2的长度,和“00000000”的长度对应00000000:报文域2的值,该处应该填写MAC数据,从报文协议中也可看出从以上各个域送的参数及报文协议中可对比看出API接口
19、是否送入了错误的参数20100203152450:00778514:139.1.99.15:0320050MS011017F759A8C54817BF89781E7DB7F576BA00080000000020100203152450:00778514:139.1.99.15:0320020MT00A95172EB1A2BC545139.1.99.15表示连接的加密机IPMS011017F759A8C54817BF89781E7DB7F576BA000800000000:为平台组装后发送给加密机的报文MT00A95172EB1A2BC545:为加密机返回给平台的报文,前边2字节为应答码,紧跟着
20、的2字节为错误代码(00表示正确,其他表示错误),紧跟着的是返回报文加密机错误代码见附录二20100203152450:00778514:before pack TT3020000000:平台返回给API接口的返回报文中的应用标识号及应答码及错误代码20100203152450:00778514:Response fldNum = 0001表示返回报文中就含有一个域20100203152450:00778514:022 0016 A95172EB1A2BC545表示该域名称为022,长度为16,值为A95172EB1A2BC545,从报文协议中可以看出该值为计算出来的MAC值。2.2.2 错误
21、日志分析以应用表示为TT的日志分析为例,以下为hsmTask_TT.log中的日志* Security Service Begin *20100203155700:00778514:after unpack TT3021:20100203155700:00778514:Request fldNum = 000220100203155700:00778514:001 0031 POS.042212107011001_8888888.zak20100203155700:00778514:021 0008 0000000020100203155700:UserErr778514-10009in Un
22、ionSecuService302: UnionReadDesKeyFromKeyDB POS.042212107011001_8888888.zak!20100203155700:00778514:before pack TT3020-11001:20100203155700:00778514:Response fldNum = 000120100203155700:00778514:999 0020 在密钥库中找不到密钥* Security Service End *分析如下:20100203155700:00778514:after unpack TT3021:可以看出服务为302服务,
23、可以根据0201 20071025 安全服务协议.doc文档中查找到302服务为计算MAC,服务报文如下:20100203155700:00778514:after unpack TT3021:根据Request fldNum = 0002可以看出该报文有2个域,见以上报文协议,该服务应该包含2个域,001域及021域20100203155700:00778514:001 0031 POS.042212107011001_8888888.zak表示报文域1相关信息。001:报文域1,和报文协议中对应0031:报文域1的长度,和“POS.042212107011001_8888888.zak”的
24、长度对应POS.042212107011001_8888888.zak:报文域1的值,该处应该填写密钥名称,从报文格式中也可看出。如果知道清楚该处交易是从何处发往何处,便可确定密钥名称。以判断参数是否送入正确20100203155700:00778514:021 0008 00000000表示报文域2相关信息021:报文域2,和报文协议中对应0008:报文域2的长度,和“00000000”的长度对应00000000:报文域2的值,该处应该填写MAC数据,从报文协议中也可看出从以上各个域送的参数及报文协议中可对比看出API接口是否送入了错误的参数20100203155700:UserErr778
25、514-10009:缺省的错误代码in UnionSecuService302: UnionReadDesKeyFromKeyDB POS.042212107011001_8888888.zak!:问题原因可以看出是密钥的问题20100203155700:00778514:before pack TT3020-11001::平台返回的错误码-1100120100203155700:00778514:Response fldNum = 000120100203155700:00778514:999 0020 在密钥库中找不到密钥:打印出的直接的错误日志“在密钥库中找不到密钥”另外如果下边没有打印
26、出错误原因所在,就需要根据错误代码-11001在常用错误代码中查找定位问题原因如-11001,11000为错误代码,1为偏移量。通过11000先查找再查找偏移量1的错误,便是-11001的错误原因了如下便可看出是密钥不存在造成的。2.3 编写目的说明这份测试分析报告的具体编写目的,指出预期的阅读范围。2.4 背景说明:a. 被测试软件系统的名称;b. 该软件的任务提出者、开发者、用户及安装此软件的计算中心,指出测试环境与实际运行环境 之间可能存在的差异以及这些差异对测试结果的影响。2.5 定义列出本文件中用到的专问术语的定义和外文首字母组词的原词组。2.6 参考资料列出要用到的参考资料,如:a
27、 本项目的经核准的计划任务书或合同、上级机关的批文;b 属于本项目的其他已发表的文件;c 本文件中各处引用的文件、资料,包括所要用到的软件开发标准。列出这些文件的标题、文件编号、发表日期和出版单位,说明能够得到这些文件资料的来源。附录一:密码平台常用错误代码#define errCodeOffsetOfDesKeyDBMDL-11000/ DES密钥库模块#define errCodeOffsetOfEnviMDL-14000/ 环境变量模块#define errCodeOffsetOfSckCommMDL-21000/ 通讯模块#define errCodeOffsetOfSocketMDL
28、-22000/ Socket模块#define errCodeOffsetOfSJL06MDL-23000/ SJL06工作组模块#define errCodeOffsetOfEsscMDL-29000/ 密码服务平台模块#define errCodeOffsetOfHsmCmdMDL-9000/密码机指令模块#define errCodeOffsetOfAPI-5000 /API模块/ 以下是共用错误码#define errCodeUseOSErrCode(0-abs(errno)/ 使用操作系统的错误码#define errCodeParameter-10001/ 参数错误#define
29、errCodeSharedMemoryModule-10002/ 共享内存错#define errCodeCreateTaskInstance-10003/ 创建任务出错#define errCodeSmallBuffer-10004/ 太小的缓冲区#define errCodeInvalidIPAddr-10005/ 非法的IP地址#define errCodeCallThirdPartyFunction-10006/ 调用第三方函数出错#define errCodeTooShortLength-10007/ 长度太小#define errCodeUserSelectExit-10008/
30、用户选择了退出#define errCodeDefaultErrCode-10009/ 缺省错误码#define errCodeIsRemarkLine-10010/ 是注释行#define errCodeNoneOperationDefined-10011/ 没定义操作命令#define errCodeNoneVarDefined-10012/ 没定义参数/API模块/offset=-5000#define errCodeAPIParameter (errCodeOffsetOfAPI-1)/ API参数错误#define errCodeAPIReqStrTooLong (errCodeOf
31、fsetOfAPI-2)/ 请求串太长#define errCodeAPIReqStrTooShort(errCodeOffsetOfAPI-3)/ 请求串太短#define errCodeAPIWrongPackRecveived (errCodeOffsetOfAPI-4)/ 收到错误的包#define errCodeAPICommWithEssc (errCodeOffsetOfAPI-5)/ 与ESSC通讯出错#define errCodeAPIBufferSmallForRecvData (errCodeOffsetOfAPI-6)/ 数据缓冲不足接收收到的数据#define err
32、CodeAPIRecvDataLenNotEqualDefinedLen (errCodeOffsetOfAPI-7) /数据长度与定义的长度不符#define errCodeAPISvrReturnZeroLenAnswer (errCodeOffsetOfAPI-8)/ 服务器返回了长度为0的响应#define errCodeAPISvrReturnTooShortAnswer (errCodeOffsetOfAPI-9)/ 服务器返回了长度太短的响应#define errCodeAPISvrReturnWrongKeyLen(errCodeOffsetOfAPI-10)/ 服务器返回的密
33、钥长度错#define errCodeAPIShouldReturnMinusButRetIsNotMinus(errCodeOffsetOfAPI-11)/ 应该返回一个错误,但程序中的返回值不是负数#define errCodeAPIEsscSvrIPAddrNotDefined(errCodeOffsetOfAPI-12)/ ESSCIPAddr没有定义#define errCodeAPIEsscSvrPortNotDefined (errCodeOffsetOfAPI-13)/ ESSC端口没有定义#define errCodeAPIEsscSvrPortInvalid (errCod
34、eOffsetOfAPI-14)/ ESSC端口错误/ 密码机指令错误/ offset = -9000#define errCodeHsmCmdMDL_ReturnLen(errCodeOffsetOfHsmCmdMDL-1)/ 返回长度错#define errCodeHsmCmdMDL_NoMK (errCodeOffsetOfHsmCmdMDL-2)/ 没有主密钥#define errCodeHsmCmdMDL_WKParity (errCodeOffsetOfHsmCmdMDL-4)/ 密钥的奇偶校验错#define errCodeHsmCmdMDL_MacOrPinCheckFailu
35、re(errCodeOffsetOfHsmCmdMDL-7)/ MAC或者密钥校验错#define errCodeHsmCmdMDL_FirstPikParity (errCodeOffsetOfHsmCmdMDL-8)/ 第一个PIK奇偶校验错#define errCodeHsmCmdMDL_SecondPikParity (errCodeOffsetOfHsmCmdMDL-9)/ 第二个PIK奇偶校验错#define errCodeHsmCmdMDL_InvalidPinType (errCodeOffsetOfHsmCmdMDL-10)/ 非法的PIN类型#define errCodeH
36、smCmdMDL_MacDataLength (errCodeOffsetOfHsmCmdMDL-11)/ MAC数据的长度错#define errCodeHsmCmdMDL_PinType(errCodeOffsetOfHsmCmdMDL-15)/ PIN的类型错#define errCodeHsmCmdMDL_CommError (errCodeOffsetOfHsmCmdMDL-19)/ 通讯出错#define errCodeHsmCmdMDL_InvalidChar (errCodeOffsetOfHsmCmdMDL-20)/ 非法字符#define errCodeHsmCmdMDL_
37、Timeout (errCodeOffsetOfHsmCmdMDL-21)/ 超时#define errCodeHsmCmdMDL_Unknown (errCodeOffsetOfHsmCmdMDL-23)/ 未知错误#define errCodeHsmCmdMDL_ErrCodeNotSuccess(errCodeOffsetOfHsmCmdMDL-24)/ 返回的错误码不是00#define errCodeHsmCmdMDL_VerifyFailure(errCodeOffsetOfHsmCmdMDL-25)/ 验证失败#define errCodeHsmCmdMDL_KeyLen(err
38、CodeOffsetOfHsmCmdMDL-26)/ 密钥长度#define errCodeHsmCmdMDL_InvalidKeyType(errCodeOffsetOfHsmCmdMDL-27)/ 密钥类型#define errCodeHsmCmdMDL_KeyLenFlag(errCodeOffsetOfHsmCmdMDL-28)/ 密钥长度标识#define errCodeHsmCmdMDL_HsmNotAvailable(errCodeOffsetOfHsmCmdMDL-29)/ 密码机不可用#define errCodeHsmCmdMDL_PinByLmk0203(errCodeO
39、ffsetOfHsmCmdMDL-30)/ LMK02-03加密的PIN错#define errCodeHsmCmdMDL_InvalidPinInputData (errCodeOffsetOfHsmCmdMDL-31)/ PIN输入数据#define errCodeHsmCmdMDL_InvalidAcc (errCodeOffsetOfHsmCmdMDL-38) / 非法账号#define errCodeHsmCmdMDL_KeyNotPermitted(errCodeOffsetOfHsmCmdMDL-45)/ 不允许使用密钥#define errCodeHsmCmdMDL_DesFa
40、ilure (errCodeOffsetOfHsmCmdMDL-49)/ DES出错/ HSM模块错误/ offset = -23000#define errCodeSJL06MDL_ServiceFailure(errCodeOffsetOfSJL06MDL-1)/ 服务失败#define errCodeSJL06MDL_NoWorkingSJL06(errCodeOffsetOfSJL06MDL-2)/ 没有工作的密码机#define errCodeSJL06MDL_SJL06StillNotOnline(errCodeOffsetOfSJL06MDL-18)/ 密码机状态不在线#defi
41、ne errCodeSJL06MDL_ConnectSJL06(errCodeOffsetOfSJL06MDL-23)/ 连接密码机#define errCodeSJL06MDL_DefaultSJL06Conf(errCodeOffsetOfSJL06MDL-24)/ SJL06缺省配置错误#define errCodeSJL06MDL_SJL06Abnormal (errCodeOffsetOfSJL06MDL-25)/ 密码机异常#define errCodeSJL06MDL_ConnectHsmGrp(errCodeOffsetOfSJL06MDL-26)/ 连接密码机组/ Socke
42、t模块错误/ offset = -22000#define errCodeSocketMDL_Timeout(errCodeOffsetOfSocketMDL-1)/ 超时#define errCodeSocketMDL_ReceiveLen(errCodeOffsetOfSocketMDL-2)/ 接收长度#define errCodeSocketMDL_Error(errCodeOffsetOfSocketMDL-3)/ 通讯失败/ 通讯模块错误/ offset = -21000#define errCodeSckCommMDL_ConfFile(errCodeOffsetOfSckCom
43、mMDL-1)/ 定义文件#define errCodeSckCommMDL_InvalidWorkingMode(errCodeOffsetOfSckCommMDL-2)/ 非法工作状态#define errCodeSckCommMDL_ServerNotDefined(errCodeOffsetOfSckCommMDL-3)/ 服务器未定义#define errCodeSckCommMDL_ServiceFailure(errCodeOffsetOfSckCommMDL-4)/ 服务失败#define errCodeSckCommMDL_NoWorkingServer(errCodeOff
44、setOfSckCommMDL-5)/ 不是工作着的服务器#define errCodeSckCommMDL_InternalError(errCodeOffsetOfSckCommMDL-6)/ 内部错误#define errCodeSckCommMDL_Connect(errCodeOffsetOfSckCommMDL-7)/ 连接通讯模块/ 环境变量模块错误/ offset = -14000#define errCodeEnviMDL_VarNotExists(errCodeOffsetOfEnviMDL-1)/ 变量不存在#define errCodeEnviMDL_NullLine(errCodeOffsetOfEnviMDL-2)/ 空行#define errCodeEnviMDL_OccupiedByOther(errCodeOffsetOfEnviMDL-3)/ 环境变量模块被别人占用了#define errCodeEnviMDL_NoValue