CN104539429B - 一种定位国密证书的方法和装置及系统 - Google Patents

一种定位国密证书的方法和装置及系统 Download PDF

Info

Publication number
CN104539429B
CN104539429B CN201410840381.4A CN201410840381A CN104539429B CN 104539429 B CN104539429 B CN 104539429B CN 201410840381 A CN201410840381 A CN 201410840381A CN 104539429 B CN104539429 B CN 104539429B
Authority
CN
China
Prior art keywords
state
close
upper layer
layer application
container
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410840381.4A
Other languages
English (en)
Other versions
CN104539429A (zh
Inventor
陆舟
于华章
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Feitian Technologies Co Ltd
Original Assignee
Feitian Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Feitian Technologies Co Ltd filed Critical Feitian Technologies Co Ltd
Priority to CN201410840381.4A priority Critical patent/CN104539429B/zh
Publication of CN104539429A publication Critical patent/CN104539429A/zh
Application granted granted Critical
Publication of CN104539429B publication Critical patent/CN104539429B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明涉及定位国密证书的方法,包括:获取中间件私有CSP句柄,根据中间件私有CSP句柄获取智能密钥设备的容器名列表中的当前容器名,根据当前容器名定位当前设备,获取当前设备容器私有CSP句柄,根据当前设备容器私有CSP句柄获取国密算法密钥句柄,如果获取到,则根据国密算法密钥句柄获取国密证书数据;否则,继续获取智能密钥设备的容器名列表中的当前容器名的下一个容器名,并将获取到的当前容器名的下一个容器名作为当前容器名,根据当前容器名继续获取国密证书数据。本发明克服了现有技术中,当系统要使用国密证书时,无法定位到国密证书的技术问题,实现了当系统要使用国密证书时,能够到定位国密证书的技术效果。

Description

一种定位国密证书的方法和装置及系统
技术领域
本发明涉及信息安全领域,特别涉及一种定位国密证书的方法和装置及系统。
背景技术
SSL(Secure Sockets Layer,安全套接字层)是一种国际标准的加密及身份认证通讯协议。SSL协议是一种在网络传输层之上的,基于浏览器和WEB服务器之间的安全连接技术。目前,B/S(浏览器/服务器)系统框架,就是依赖WEB服务器对SSL技术的支持,利用数字证书来实现系统的身份认证。当用户使用浏览器访问WEB服务器时,会在客户端和服务器端之间建立安全的SSL通道。目前流行的IE、Netscape、Opera等浏览器均支持SSL技术。
数字证书是由国家认可的,具有权威性、可信性和公正性的第三方证书认证机构(CA)颁发的一个可信的数字化文件,根据采用的密码算法不同,可以分为国密证书、RSA证书等。其中,国密证书是基于SM2密码算法,采用GB/T16262系列标准的DER(DistinguishedEncoding Rules,区分编码规则)编码规则,对证书中的各项信息进行编码,组成特定的证书数据结构的一种数字证书。
Cryptographic Service Provider(简称CSP)是微软用来在Windows平台上提供第三方加密模块的接口标准。CSP接口标准是一个包含了标准加密算法实现的软件模块。CSP模块直接和硬件加密设备安全协处理器交互。CSP模块包含了一些标准加密算法的实现,实现的算法包括:非对称加密算法RSA、对称加密算法DES、摘要算法MD2、MD5、SHA1。CSP模块是CAPI函数的具体执行者,同时CSP模块也提供了密钥的安全存储和使用机制。Windows应用程序只要调用CAPI函数就可以获得系统提供的、标准的加解密和证书的操作功能。
现有技术中,基于B/S(浏览器/服务器)框架的系统的登录身份认证,依赖于服务器端证书和客户端证书的双向SSL认证来完成,这就需要中间件将智能密钥设备中的数字证书注册到浏览器的证书存储区中。因此,当系统要使用数字证书时,可以从证书存储区中定位数字证书。但是,当智能密钥设备中的数字证书包含国密证书时,中间件不能将国密证书注册到浏览器的证书存储区中。因此,当系统要使用国密证书时,会有如何定位国密证书的技术问题。
发明内容
本发明提供了一种定位国密证书的方法和装置及系统,用以解决现有技术中无法定位国密证书的技术问题。
本发明提供了一种定位国密证书的方法,所述方法包括:
步骤A1:中间件的函数等待被调用,若第一函数被调用,则执行步骤A2;若第二函数被调用,则执行步骤A4;若第三函数被调用,则执行步骤A6;若第四函数被调用,则执行步骤A8;
步骤A2:判断获取到的当前容器名是否为空,如果是,则获取中间件私有CSP句柄,输出中间件私有CSP句柄并返回成功标识;否则,执行步骤A3;
步骤A3:根据当前容器名获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,判断是否定位到当前设备,如果是,则根据所述当前设备设置当前设备容器私有CSP句柄,输出所述当前设备容器私有CSP句柄,返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤A4:判断获取到的当前枚举参数的类型,若所述当前枚举参数的类型是枚举容器参数类型,则执行步骤A5;
步骤A5:获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的当前容器名,判断所述当前容器名是否存在,如果是,则输出所述当前容器名并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤A6:判断获取到的当前设备容器私有CSP句柄和国密算法标识是否合法,如果是,则执行步骤A7;否则,返回失败标识,返回步骤A1;
步骤A7:根据所述当前设备容器私有CSP句柄和所述国密算法标识,查找当前设备的容器名为所述当前容器名的容器中是否存在国密用法密钥,如果是查找到,则将预设国密用法密钥句柄作为国密算法密钥句柄,输出所述国密算法密钥句柄并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤A8:判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄是否合法,如果是,则执行步骤A9;否则,返回失败标识,返回步骤A1;
步骤A9:根据所述当前设备容器私有CSP句柄和所述国密算法密钥句柄查找到当前设备中的容器名为所述当前容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出所述国密证书数据,并且返回成功标识,返回步骤A1;否则返回失败标识,返回步骤A1。
本发明提供了一种定位国密证书的装置,所述装置包括:
第一判断模块,用于当中间件的第一函数被调用时,判断获取到的当前容器名是否为空,如果是,则触发第一获取模块;否则,触发第二获取模块;
所述第一获取模块,用于获取中间件私有CSP句柄,触发第一输出模块;
所述第一输出模块,用于输出中间件私有CSP句柄和成功标识;
所述第二获取模块,用于根据当前容器名获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,触发第二判断模块;
所述第二判断模块,用于判断是否定位到当前设备,如果是,则触发第三获取模块;否则,触发第二输出模块;
所述第三获取模块,用于根据所述当前设备设置当前设备容器私有CSP句柄,触发第三输出模块;
所述第二输出模块,用于输出失败标识;
所述第三输出模块,用于输出所述当前设备容器私有CSP句柄和成功标识;
所述第三判断模块,用于当中间件的第二函数被调用时,判断获取到的当前枚举参数的类型,若所述当前枚举参数的类型是枚举容器参数类型,触发第四获取模块;
所述第四获取模块,用于获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的当前容器名,触发第四判断模块;
所述第四判断模块,用于判断所述当前容器名是否存在,如果是,则触发第四输出模块;否则,触发第五输出模块;
所述第四输出模块,用于输出所述当前容器名和成功标识;
所述第五输出模块,用于输出失败标识;
所述第五判断模块,用于当中间件的第三函数被调用时,判断获取到的当前设备容器私有CSP句柄和国密算法标识是否合法,如果是,则触发第五获取模块;否则,触发第六输出模块;
所述第五获取模块,用于根据所述当前设备容器私有CSP句柄和所述国密算法标识,查找当前设备的容器名为所述当前容器名的容器获取国密用法密钥,触发第六判断模块;
所述第六判断模块,用于判断是否获取到所述国密用法密钥,如果是,则触发第六获取模块;否则,触发第六输出模块;
所述第六获取模块,用于将预设国密用法密钥句柄作为国密算法密钥句柄,触发第七输出模块;
所述第六输出模块,用于输出失败标识;
所述第七输出模块,用于输出所述国密算法密钥句柄和成功标识;
第七判断模块,用于当中间件的第四函数被调用时,判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄是否合法,如果是,则触发第七获取模块;否则,触发第八输出模块;
所述第七获取模块,用于根据所述当前设备容器私有CSP句柄和所述国密算法密钥句柄查找到当前设备中的容器名为所述当前容器名的容器,获取容器中的国密证书数据,触发第八判断模块;
所述第八判断模块判断是否读取到合法的国密证书数据,如果是,则触发第九输出模块;否则触发第八输出模块;
所述第九输出模块,用于输出所述国密证书数据和返回成功标识;
所述第八输出模块,用于输出失败标识。
本发明提供了一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备,当所述中间件的注册证书模块检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,所述系统包括:
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
所述服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
所述服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;
所述服务器第二获取模块,用于根据所述用户信息获取私有CSP名和认证信息,触发服务器第一发送模块;
所述服务器第一发送模块,用于将预设国密证书类型标识、所述私有CSP名、所述认证信息和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一发送模块;
所述上层应用第一发送模块,用于当获取到国密证书类型信息时,调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给所述中间件的第一函数,触发中间件第一获取模块;
所述中间件第一获取模块,用于当所述中间件的所述第一函数获取到的当前容器参数为预设容器名时,根据预设容器名设置中间件私有CSP句柄,触发中间件第一输出模块,
所述中间件第一输出模块,用于输出中间件私有CSP句柄和成功标识,触发上层应用第二发送模块;
所述上层应用第二发送模块,用于设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数,触发中间件第二获取模块;
所述中间件第二获取模块,用于当所述中间件的所述第二函数获取到中间件私有CSP句柄和第一枚举容器参数时,获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的第一容器名,触发中间件第一判断模块;
所述中间件第一判断模块,用于判断所述第一容器名是否存在,如果是,则将所述第一容器名作为当前容器名,触发中间件第二输出模块;否则,触发中间件第三输出模块;
所述中间件第二输出模块,用于输出所述当前容器名和成功标识,触发上层应用第一判断模块;
所述中间件第三输出模块,用于输出失败标识,触发上层应用第一判断模块;
所述上层应用第一判断模块,用于判断是否获取到当前容器名,如果是,则触发上层应用第三发送模块;否则,触发上层应用报错模块;
所述上层应用报错模块,用于报错退出;
所述上层应用第三发送模块,用于调用主机操作系统的所述第一接口函数根据中间件私有CSP句柄,将当前容器名作为当前容器参数传递给中间件的第一函数,触发中间件第三获取模块;
所述中间件第三获取模块,用于当所述中间件的所述第一函数获取到当前容器名时,解析所述当前容器名,获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,触发中间件第二判断模块;
所述中间件第二判断模块,用于判断是否定位到当前设备,如果是,则触发中间件第四获取模块;否则,触发中间件第四输出模块;
所述中间件第四获取模块,用于根据所述当前设备设置当前设备容器私有CSP句柄,触发中间件第五输出模块;
所述中间件第五输出模块,用于输出所述当前设备容器私有CSP句柄和成功标识,触发上层应用第二判断模块;
所述中间件第四输出模块,用于输出失败标识,触发上层应用第二判断模块;
所述上层应用第二判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第四发送模块;否则,触发所述上层应用报错模块;
所述上层应用第四发送模块,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数,触发所述中间件第五获取模块;
所述中间件第五获取模块,用于当所述中间件的所述第三函数获取到当前设备容器私有CSP句柄和预设国密算法标识时,根据所述当前设备容器私有CSP句柄和所述国密算法标识,查找当前设备的容器名为所述当前容器名的容器获取国密签名算法密钥,触发中间件第三判断模块;
所述中间件第三判断模块,用于判断是否获取到国密签名算法密钥,如果是,则触发中间件第六获取模块;否则,触发中间件第七输出模块;
所述中间件第六获取模块,用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发中间件第六输出模块;
所述中间件第六输出模块,用于输出所述国密算法密钥句柄和成功标识,触发上层应用第三判断模块;
所述中间件第七输出模块,用于输出失败标识,触发上层应用第三判断模块;
所述上层应用第三判断模块,用于判断是否获取到国密算法密钥句柄,如果是,在触发上层应用第五发送模块;否则,触发所述上层应用报错模块;
所述上层应用第五发送模块,用于调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给所述中间件的第四函数,触发中间件第七获取模块;
所述中间件第七获取模块,用于当所述中间件的第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,根据当前设备容器私有CSP句柄和国密算法密钥句柄获取国密证书数据,触发中间件第四判断模块;
所述中间件第四判断模块,用于判断是否读取到合法的国密证书数据,如果是,则触发中间件第八输出模块;否则,触发中间件第九输出模块;
所述中间件第九输出模块,用于输出失败标识,触发上层应用第四判断模块;
所述中间件第八输出模块,用于输出所述国密证书数据和成功标识,触发上层应用第四判断模块;
所述上层应用第四判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第一获取模块,否则,触发所述上层应用报错模块;
所述上层应用第一获取模块,用于根据国密证书数据获取国密证书认证信息,触发上层应用第五判断模块;
所述上层应用第五判断模块,用于判断国密证书认证信息是否和认证信息相匹配,如果是,则触发上层应用第二获取模块,否则,释放所述当前设备容器私有CSP句柄,触发上层应用第六发送模块;
所述上层应用第二获取模块,用于获取国密签名数据,触发上层应用第一返回模块;
所述上层应用第一返回模块,用于向服务器返回所述国密签名数据;
所述上层应用第六发送模块,用于设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和所述当前枚举参数传递所述中间件的所述第二函数,触发中间件第八获取模块;
所述中间件第八获取模块,用于当所述中间件的所述第二函数获取到中间件私有CSP句柄和第二枚举容器参数时,获取当前容器名的下一个容器名,触发中间件第五判断模块;
所述中间件第五判断模块,用于判断所述当前容器名的下一个容器名是否存在,如果是,则将当前容器名的下一个容器名作为当前容器名,触发所述中间件第二输出模块;否则,触发所述中间件第三输出模块。
本发明的有益效果是:当系统要使用国密证书时,可以根据本发明获取到当前容器名,根据当前容器名定位到当前设备,根据当前设备获取当前设备的容器中的国密证书数据,从而定位到国密证书。
附图说明
图1-图6为本发明实施例1提供的一种定位国密证书的方法的流程图;
图7-图8为本发明实施例2提供的一种签名程序的工作方法流程图;
图9为本发明实施例4提供的一种定位国密证书的装置的结构图。
具体实施方式
下面将结合本发明的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例提供了一种将智能密钥设备中的证书注册到浏览器的证书存储区中的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统,当中间件检测到智能密钥设备和主机连接时,中间件执行如下步骤:
步骤101:当中间件检测到智能密钥设备和主机连接时,获取智能密钥设备的设备信息和证书列表;
其中,设备信息中包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息;
证书列表包括智能密钥设备中的证书信息,其中证书信息可以是证书的版本信息、证书的序列号信息、证书所使用的签名算法信息、证书的发行机构名称信息、证书的有效期信息、证书所有人的名称信息、证书所有人的公钥信息和证书发行者对证书的签名信息等。
步骤102:中间件遍历证书列表,判断当前证书的类型,如果当前证书的类型是国密证书类型,则继续遍历;如果当前证书的类型是非国密证书类型,则中间件将当前证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程;
具体地,中间件遍历证书列表,判断当前证书的类型,判断当前证书所有人的公钥信息中的密钥算法标识是否是国密密钥标识,如果是,则判断当前证书是国密证书,则继续遍历;如果不是国密密钥标识,则判断当前证书类型是非国密证书类型,中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程。
需要说明的是,本发明中的证书均指数字证书。
实施例1
本发明实施例1提供了一种定位国密证书的方法,如图1-图6所示,中间件执行如下步骤:
步骤201:中间件的函数等待被调用,如果第一函数被调用,则执行步骤202;如果第二函数被调用,则执行步骤204;如果第三函数被调用,则执行步骤207;如果第四函数被调用,则执行步骤209;如果第五函数被调用,则执行步骤211;如果第六函数被调用,则执行步骤213;如果第七函数被调用,则执行步骤215;
本实施例中,第一函数可以是CPAcquireContext函数;第二函数可以是CPGetProvParam函数;第三函数可以是CPGetUserKey函数;第四函数可以是CPGetKeyParam函数;第五函数可以是CPCreateHash函数;第六函数可以是CPHashData函数;第七函数可以是CPSignHash函数。
步骤202:判断获取到的当前容器名是否为空,如果是,则获取中间件私有CSP句柄,返回成功标识,返回步骤201;否则,执行步骤203;
具体的,根据当前容器参数获取当前容器名,判断当前容器名是否为空,如果为空,则将一个无符号长整型数值设置为中间件私有CSP句柄,输出中间件私有CSP句柄,并返回成功标识,返回步骤201;如果不为空,则执行步骤203。
本实施例中,成功标识可以是TRUE。
步骤203:根据当前容器名获取设备名和设备容器名,根据设备名和设备容器名定位当前设备,判断是否定位到当前设备,如果是,则根据当前设备设置当前设备容器私有CSP句柄,输出当前设备容器私有CSP句柄,返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
本步骤中,具体包括:
步骤a1:根据当前容器名获取设备名和设备容器名,判断设备名是否为不为空,如果是,则执行步骤a2;否则,执行步骤a6;
具体地,解析当前容器名,根据解析的结果获取设备名和设备容器名,判断设备名是否为不为空,如果是,则执行步骤a2;否则,执行步骤a6;
例如:解析当前容器名,获取到\\.\ES2001 VCR1\le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D,其中ES2001 VCR 1为设备名,le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D为设备容器名。
步骤a2:根据设备名获取和设备名相匹配的智能密钥设备,查找是否存在和设备名相匹配的智能密钥设备,如果是,则执行步骤a3;否则,返回失败标识,返回步骤201。
具体地,第一函数获取连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中是否存在和设备名相同的智能密钥设备,如果是,则判断是存在和设备名相匹配的智能密钥设备,则执行步骤a3;否则,判断不存在和设备名相匹配的智能密钥设备,返回失败标识,结束。
其中,设备信息包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息。
本实施例中,失败标识可以是FALSE。
步骤a3:查找和设备名相匹配的智能密钥设备中是否存在和设备容器名相匹配的容器,如果是,则执行步骤a4;否则,返回失败标识,返回步骤201。
步骤a4:将和设备名相匹配的智能密钥设备作为当前设备,保存当前设备ID;
步骤a5:根据当前设备设置当前设备容器私有CSP句柄,输出当前设备容器私有CSP句柄,返回成功标识,返回步骤201。
步骤a6:根据所述设备容器名获取和所述设备容器名相匹配的智能密钥设备,检查否存在和设备容器名相匹配的智能密钥设备,如果是,则执行步骤a7;否则,返回失败标识,返回步骤201。
具体地,获取到连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中是否存在以设备容器名为容器名的容器,如果存在,则判断是否存在和设备容器名相匹配的智能密钥设备,否则,判断不存在和设备容器名相匹配的智能密钥设备。
其中,设备信息包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息。
步骤a7:判断是否查找到唯一和设备容器名相匹配的智能密钥设备,如果是,则执行步骤a12;否则,执行步骤a9;
步骤a9:判断是否需要输出提示选择智能密钥设备信息,如果是,则执行步骤a10;否则,执行步骤a11;
步骤a10:输出需要用户选择智能密钥设备的提示信息,将用户选择的智能密钥设备作为当前设备,保存当前设备ID,返回步骤a5;
步骤a11:将查找到的第一个和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,返回步骤a5;
步骤a12:将唯一和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,返回步骤a5;
步骤204:判断获取到的中间件私有CSP句柄和当前枚举参数是否合法,如果是,则判断当前枚举参数的类型,若当前枚举参数的类型是枚举算法参数类型,则执行步骤205,若当前枚举参数类型是枚举容器参数类型,则执行步骤206;否则返回失败标识,返回步骤201;
本实施例中,枚举算法参数包括:第一枚举算法参数和第二枚举算法参数;枚举容器参数包括:第一枚举容器参数和第二枚举容器参数;
步骤205:获取中间件的预设算法列表中的当前算法标识,判断当前算法标识是否存在,如果是,则输出当前算法标识,并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
本实施例中,中间件的预设算法列表中包括中间件支持的所有算法的算法标识。其中,中间件的预设算法列表中的算法标识可以是国密算法标识、哈希算法标识、RSA算法标识等,其中,国密算法标识可以是SM2_SIGN、SM2_KEYX,哈希算法标识可以是SM3、MD5、SHA1,RSA算法标识可以是RSA,需要说明的是,其中,SM2_KEYX是国密交换算法标识、SM2_SIGN是国密签名算法标识,哈希算法标识中的SM3是与国密签名算法标识SM2_SIGN相应的摘要算法标识。
具体地,当枚举算法参数类型是第一枚举算法参数时,获取中间件的预设算法列表中的第一算法标识,判断第一算法标识是否存在,如果是,则将第一算法标识作为当前算法标识,输出当前算法标识,并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
当枚举算法参数类型是第二枚举算法参数时,获取中间件的预设算法列表中的当前算法标识的下一个算法标识,判断当前算法标识的下一个算法标识是否存在,如果是,则将当前算法标识的下一个算法标识作为当前算法标识,输出当前算法标识,并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
步骤206:获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的当前容器名,判断当前容器名是否存在,如果是,则输出当前容器名并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
具体地,当枚举容器参数类型是第一枚举容器参数时,获取与主机连接的智能密钥设备的容器名列表,获取容器名列表中的第一容器名,判断第一容器名是否存在,如果是,则将第一容器名作为当前容器名,输出当前容器名并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
当枚举容器参数类型是第二枚举容器参数时,获取容器名列表中的当前容器名的下一个容器名,判断当前容器名的下一个容器名是否存在,如果是,则将当前容器名的下一个容器名作为当前容器名,输出当前容器名并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
步骤207:判断获取到的当前设备容器私有CSP句柄和国密算法标识是否合法,如果是,则执行步骤208;否则,返回失败标识,返回步骤201;
步骤208:根据当前设备容器私有CSP句柄和国密算法标识查找当前设备中的容器名为当前容器名的容器中是否存在国密用法密钥,如果是,则将预设国密用法密钥句柄作为国密算法密钥句柄,输出国密算法密钥句柄并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201;
本实施例中,国密算法标识包括国密签名算法标识、国密交换算法标识。
步骤209:判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄是否合法,如果是,则执行步骤210;否则,返回失败标识,返回步骤201;
步骤210:根据当前设备容器私有CSP句柄和国密算法密钥句柄查找到当前设备中的容器名为当前容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出国密证书数据,并且返回成功标识,返回步骤201;否则返回失败标识,返回步骤201;
步骤211:判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄和摘要算法标识是否合法,如果是,则执行步骤212;否则,返回失败标识,返回步骤201;
步骤212:初始化一个哈希对象实例,将哈希对象实例的地址作为哈希句柄,输出哈希句柄并返回成功标识,返回步骤201;
步骤213:判断获取到的当前设备容器私有CSP句柄和哈希句柄和待签数据是否合法,如果是,则执行步骤214;否则,返回失败标识,返回步骤201;
步骤214:用哈希句柄对待签数据做摘要,获取摘要值并保存待签数据,返回成功标识,返回步骤201;
步骤215:判断获取到的当前设备容器私有CSP句柄和哈希句柄和国密签名算法标识是否合法,如果是,则执行步骤216;否则,返回失败标识,返回步骤201;
步骤216:判断是否获取到国密签名数据,如果是,则输出国密签名数据并返回成功标识,返回步骤201;否则,返回失败标识,返回步骤201。
本步骤具体包括:
b1:判断是否验证过当前设备PIN码,如果验证过当前设备PIN码,则执行步骤b2;如果没有验证过设备PIN码,则输出提示验证设备PIN码信息,当获取到合法的当前设备PIN码时,执行步骤b2;
步骤b2:获取国密Z值,当当前设备是一代设备时,根据国密Z值和哈希句柄获取的摘要值获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,输出国密签名数据并返回成功标识,返回步骤201;如果没有获取到国密签名数据,则返回失败标识,返回步骤201;
当当前设备是二代设备时,根据国密Z值和待签数据获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,输出国密签名数据并返回成功标识,返回步骤201;如果没有获取到国密签名数据,则返回失败标识,返回步骤201。
实施例2
本发明实施例2提供了一种定位国密证书的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统。
本实施例中,上层应用可以是签名程序。
步骤301:服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,服务器根据选择的证书类型向签名程序发送证书类型信息,等待获取签名数据,若获取到的用户信息不合法,则输出错误提示信息;
其中,证书类型包括国密证书类型和非国密证书类型;证书类型信息包括国密证书类型信息和非国密证书类型信息;签名数据包括国密签名数据和非国密签名数据。
具体地,服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型是国密证书类型时,服务器根据用户信息获取私有CSP名和认证信息并将预设国密证书类型标识、私有CSP名、认证信息和待签数据作为国密证书类型信息发送给签名程序,等待获取国密签名数据;当选择的证书类型是非国密证书类型时,将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给签名程序,等待获取非国密签名数据,若获取到的用户信息不合法,则输出错误提示信息;
其中,非国密证书类型可以是RSA证书类型。
本实施例中,认证信息可以是与用户信息绑定的国密证书DN(DistinguishedName,甄别名)信息。
例如,服务器获取与用户信息绑定的国密证书的DN信息,获取到DN信息中的CN(Common name,常用名)属性信息为“CN=TEST1”,将“CN=TEST1”作为认证信息的标识。
其中,私有CSP名是指智能密钥设备提供商的信息,例如“EnterSafe ET199AutoCSP V1.0”。
本实施中,当签名程序获取到服务器发送的证书类型信息时,签名程序根据证书类型信息中的预设证书类型标识判断本次签名所使用的证书类型,如果,预设证书类型标识是预设非国密证书类型标识,则根据注册到浏览器的证书存储区中的非国密证书,按照正常的签名流程获取签名数据,返回给服务器;如果,预设证书类型标识是预设国密证书类型标识,则签名程序执行如下步骤,如图7-图8所示,包括:
步骤401:签名程序调用主机操作系统的第一接口函数根据私有CSP名,将预设容器名作为当前容器参数传递给中间件的第一函数,获取中间件私有CSP句柄;
本步骤中,签名程序设置预设容器名为NULL。
本实施例中,主机操作系统可以是微软提供的Windows操作系统。
本实施例中,第一接口函数的可以是CryptAcquireContext函数,第一函数可以是CPAcquireContext函数。
需要说明的是,当中间件的第一函数被调用时,第一函数根据当前容器参数判断当前容器名是否为空,如果为空,则将一个无符号长整型数值设置为中间件私有CSP句柄,输出中间件私有CSP句柄,并返回成功标识。
本实施例中,成功标识可以是TRUE。
步骤402:签名程序判断是否获取到中间件私有CSP句柄,如果是,则执行步骤403;否则,报错退出;
具体地,签名程序判断得到的返回值是否为成功标识,如果是,则判断获取到中间件私有CSP句柄;否则,判断没有获取到中间件私有CSP句柄,报错退出。
本步骤中,签名程序还可以根据获取到的中间件私有CSP句柄是否为空来判断是否获取到中间件私有CSP句柄,如果获取到的中间件私有CSP句柄不为空,则判断获取到中间件私有CSP句柄,如果获取到的中间件私有CSP句柄为空,则判断没有获取到中间件私有CSP句柄,报错退出。
本实施中,签名程序根据获取到的中间件私有CSP句柄可以定位到智能密钥设备提供商提供的中间件。
步骤403:签名程序设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数,将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,枚举中间件的预设算法列表,获取中间件的预设算法列表中的第一算法标识,执行步骤404;
本实施例中,第二接口函数可以是CryptGetProvParam函数,第二函数可以是CPGetProvParam函数;中间件的预设算法列表中包括中间件支持的所有算法的算法标识。
其中,中间件的预设算法列表中的算法标识可以是国密算法标识、哈希算法标识、RSA算法标识等,其中,国密算法标识可以是SM2_SIGN、SM2_KEYX,哈希算法标识可以是SM3、MD5、SHA1,RSA算法标识可以是RSA,需要说明的是,其中,SM2_SIGN是国密签名算法标识,哈希算法标识中的SM3是与国密签名算法标识SM2_SIGN相应的摘要算法标识。
本步骤中,签名程序设置第一枚举算法参数包括设置第一枚举算法类型参数和第一枚举算法标志位参数,具体地,设置第一枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第一枚举算法标志位参数为CRYPT_FIRST。
具体地,当中间件的第二函数获取到枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,枚举算法标志位参数为CRYPT_FIRST时,第二函数获取预设算法列表中的第一个算法标识,复位计数器,判断第一算法标识是否存在,如果是,输出第一算法标识并返回成功标识;否则,返回失败标识。
本实施例中,失败标识可以是FALSE,第二函数设置计数器初始值为0。
步骤404:签名程序判断是否获取到中间件的预设算法列表中的第一算法标识,如果是,则将第一算法标识作为当前算法标识,执行步骤405;否则,报错退出;
具体地,签名程序根据获取到的第一算法标识不为空且得到的返回值为成功标识,判断获取到中间件的预设算法列表中的第一算法标识,根据得到的返回值为失败标识,判断没有获取到中间件的预设算法列表中的第一算法标识。
步骤405:签名程序设置当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数,将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,枚举中间件的预设算法列表,获取当前算法标识的下一个算法标识;
本步骤中,签名程序设置第二枚举算法参数包括设置第二枚举算法类型参数和第二枚举算法标志位参数,具体地,设置第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第二枚举算法标志位参数为CRYPT_NEXT。
当第二函数获取到第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX、第二枚举算法标志位参数为CRYPT_NEXT时,第二函数将计数器加1,获取预设算法列表中和当前计数器数值所对应的算法标识,判断预设算法列表中和当前计数器数值所对应的算法标识是否存在,如果存在,则将和当前计数器数值所对应的算法标识作为当前算法标识的下一个算法标识,输出当前算法标识的下一个算法标识,并返回成功标识;否则,返回失败标识。
步骤406:签名程序判断是否获取到当前算法标识的下一个算法标识,如果是,则将当前算法标识的下一个算法标识作为当前算法标识,返回步骤405;否则,执行步骤407;
具体地,签名程序根据获取到的当前算法标识的下一个算法标识不为空且得到的返回值为成功标识,判断获取到中间件的预设算法列表中的当前算法标识的下一个算法标识,根据得到的返回值为失败标识,判断没有获取到中间件的预设算法列表中的当前算法标识的下一个算法标识。
步骤407:签名程序根据获取到的全部算法标识判断中间件是否支持国密签名算法,如果是,则执行步骤408;否则,报错退出;
具体地,签名程序根据获取到的中间件的预设算法列表中的全部算法标识中是否包含国密签名算法标识和摘要算法标识,如果是,则执行步骤408;否则,报错退出;
本实施例中,签名程序判断获取到的中间件的预设算法列表中的算法标识中是否包含SM2_SIGN和SM3,如果包含,则执行步骤408;否则,报错退出。
步骤408:签名程序设置当前枚举参数为第一枚举容器参数,调用主机操作系统第二接口函数,将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,获取容器名列表中的第一容器名,将第一容器名作为当前容器名,执行步骤409;
本步骤中,签名程序设置第一枚举容器参数包括设置第一枚举容器类型参数和第一枚举容器标志位参数,设置第一枚举容器类型参数为PP_ENUMCONTAINERS,设置第一枚举容器标志位参数为CRYPT_FIRST。
当第二函数获取到第一枚举容器类型参数为PP_ENUMCONTAINERS,第一枚举容器标志位参数为CRYPT_FIRST时,获取包含所有智能密钥设备的容器名的容器名列表,第二函数获取容器名列表中的第一个容器名,复位计数器,判断第一容器名是否存在,如果是,输出第一容器名并返回成功标识;否则,返回失败标识;
本实施例中,第二函数设置计数器初始值为0。
步骤409:签名程序判断是否获取到当前容器名,如果是,则执行步骤410;否则,报错退出;
具体地,签名程序根据获取到的当前容器名不为空且得到的返回值是为成功标识,判断获取到当前容器名,根据得到的返回值为失败标识,判断没有获取到当前容器名。
步骤410:签名程序调用主机操作系统第一接口函数,根据中间件私有CSP句柄将当前容器名作为容器名参数传递给中间件的第一函数,获取当前设备容器私有CSP句柄;
当中间件的第一函数获取到当前容器名时,第一函数执行如下步骤:
步骤c1:第一函数解析当前容器名,获取设备名和设备容器名,判断设备名是否为不为空,如果是,则执行步骤c2;否则,执行步骤c6;
例如:第一函数解析当前容器名,获取到\\.\ES2001 VCR 1\le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D,其中ES2001 VCR 1为设备名,le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D为设备容器名。
步骤c2:第一函数查找是否存在和设备名相匹配的智能密钥设备,如果是,则执行步骤c3;否则,返回失败标识,结束。
具体地,第一函数获取连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中是否存在和设备名相同的智能密钥设备,如果是,则判断是存在和设备名相匹配的智能密钥设备,则执行步骤c3;否则,判断不存在和设备名相匹配的智能密钥设备,返回失败标识,结束。
步骤c3:第一函数查找和设备名相匹配的智能密钥设备中是否存在和设备容器名相匹配的容器,如果是,则执行步骤c4;否则,返回失败标识,结束。
步骤c4:第一函数将和设备名相匹配的智能密钥设备作为当前设备,保存当前设备ID;
步骤c5:第一函数将一个无符号长整型数值设置为当前设备容器私有CSP句柄,输出当前设备容器私有CSP句柄,结束。
步骤c6:第一函数检查否存在和设备容器名相匹配的智能密钥设备,如果是,则执行步骤c7;否则,返回失败标识,结束。
具体地,获取连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中是否存在以设备容器名为容器名的容器,如果存在,则判断存在和设备容器名相匹配的智能密钥设备,否则,判断不存在和设备容器名相匹配的智能密钥设备。
步骤c7:第一函数判断是否查找到唯一和设备容器名相匹配的智能密钥设备,如果是,则执行步骤c12;否则,执行步骤c9;
步骤c9:第一函数判断是否需要输出提示选择智能密钥设备信息,如果是,则执行步骤c10;否则,执行步骤c11;
步骤c10:第一函数输出需要用户选择智能密钥设备的提示信息,将用户选择的智能密钥设备作为当前设备,保存当前设备ID,返回步骤c5;
步骤c11:第一函数将查找到的第一个和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,返回步骤c5;
步骤c12:第一函数将唯一和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,返回步骤c5;
步骤411:签名程序判断是否获取到当前设备容器私有CSP句柄,如果是,则执行步骤412;否则,报错退出;
具体地,签名程序判断得到的返回值是否为成功标识,如果是,则判断获取到当前设备容器私有CSP句柄;否则,判断没有获取到当前设备容器私有CSP句柄,报错退出。
本步骤中,签名程序还可以根据获取到的当前设备容器私有CSP句柄是否为空来判断是否获取到当前设备容器私有CSP句柄,如果获取到的当前设备容器私有CSP句柄不为空,则判断获取到当前设备容器私有CSP句柄,如果获取到的当前设备容器私有CSP句柄为空,则判断没有获取到中间件私有CSP句柄,报错退出。
本实施例中,签名程序根据获取到的当前设备容器私有CSP句柄可以定位到当前设备中的容器名为当前容器名的容器。
步骤412:签名程序调用主机操作系统第三接口函数,将当前设备容器私有CSP句柄和预设国密签名算法标识传递给中间件的第三函数,获取当前设备中的容器名为当前容器名的容器中的国密算法密钥句柄;
本实施例中,第三接口函数可以是CryptGetUserKey函数,第三函数可以是CPGetUserKey函数。
本步骤中,签名程序调用CryptGetUserKey函数,将当前密钥容器私有CSP句柄和国密签名算法标识传递给相应中间件的CPGetUserKey函数,获取国密算法密钥句柄。
需要说明的是,当第三函数获取到当前设备容器私有CSP句柄和预设国密签名算法标识时,第三函数根据当前设备容器私有CSP句柄和预设国密签名算法标识查找当前设备中的容器名为当前容器名的容器中是否存在国密签名密钥,如果查找到,则将预设国密签名算法密钥句柄赋值给国密算法密钥句柄,输出国密算法密钥句柄并返回成功标识;否则,返回失败标识。
其中,预设国密签名算法密钥句柄是一个无符号长整型数值。
步骤413:签名程序判断是否获取到国密算法密钥句柄,如果是,则执行步骤415;否则,释放当前设备容器私有CSP句柄,执行步骤414;
具体地,签名程序判断获取到国密算法密钥句柄是否为空值,如果获取到的国密算法密钥句柄不为空值,则判断获取到国密算法密钥句柄;否则,释放当前设备容器私有CSP句柄,执行步骤414;
本步骤中,签名程序还可以根据得到的返回值是否为成功标识,判断是否获取到国密算法密钥句柄,如果为成功标识,则判断获取国密算法密钥句柄;否则,没有获取到国密算法密钥句柄。
步骤414:签名程序设置当前枚举参数为第二枚举容器参数,调用主机操作系统第二接口函数,将私有CSP句柄和第二枚举容器参数传递给中间件的第二函数,获取当前容器名的下一个容器名,将当前容器名的下一个容器名作为当前容器名,返回步骤409;
本步骤中,签名程序设置第二枚举容器参数包括设置第二枚举容器类型参数和第二枚举容器标志位参数,设置第二枚举容器类型参数为PP_ENUMCONTAINERS,设置第二枚举容器标志位参数为CRYPT_NEXT。
当第二函数获取到第二枚举容器标志位参数为CRYPT_NEXT时,将计数器加1,获取容器名列表中和当前计数器数值所对应的容器名,判断容器名列表中和当前计数器数值一致的序号所对应的容器名是否存在,如果存在,则将当前计数器数值所对应的容器名作为当前容器名的下一个容器名,输出当前容器名的下一个容器名,并返回成功标识;否则,返回失败标识。
步骤415:签名程序根据当前设备容器私有CSP句柄和国密算法密钥句柄获取当前设备中的容器名为当前容器名的容器中的国密证书数据,执行步骤416;
具体地,签名程序调用主机操作系统第四接口函数,将当前设备容器私有CSP句柄和国密算法密钥句柄传递给中间件的第四函数,获取国密证书数据;
本实施例中,第四接口函数可以是CryptGetKeyParam函数,第四函数可以是CPGetKeyParam函数。
需要说明的是,当第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,第四函数查找到当前设备中的容器名为当前容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出国密证书数据,并且返回成功标识;否则返回失败标识。
步骤416:签名程序判断是否获取到国密证书数据,如果是,则执行步骤417;否则,报错退出;
具体地,签名程序根据获取到的国密证书数据是否不为空,且得到的返回值是否为成功标识,判断获取到国密证书数据,根据得到的返回值为失败标识,判断没有获取到国密证书数据。
步骤417:签名程序根据国密证书数据获取国密证书上下文结构体,执行步骤418;
具体地,签名程序调用主机操作系统的解析证书函数,根据国密证书数据获取国密证书上下文结构体;
本实施例中,解析证书函数可以是CertCreateCertificateContext函数。
步骤418:签名程序根据国密证书上下文结构体获取国密证书认证信息;
具体地,签名程序调用主机操作系统的证书名转换格式函数,根据国密证书上下文结构体获取国密证书认证信息;
本实施例中,证书名转换格式函数可以是CertNameToStr函数。
本步骤中,签名程序获取到的国密证书认证信息可以是国密证书的DN信息。
例如,签名程序根据国密证书上下文结构体调用主机操作系统提供的CertNameToStr函数获取国密证书的DN信息,获取到DN信息中的CN属性信息为“CN=TEST1”,将CN属性信息作为国密证书认证信息的标识。
步骤419:签名程序判断国密证书认证信息是否和认证信息相匹配,如果是,则执行步骤420;否则,释放当前设备容器私有CSP句柄,返回步骤414;
具体地,签名程序查找国密证书认证信息的标识中是否包含和认证信息的标识一致的标识信息,如果是,则匹配;否则,不匹配。
例如,若获取到的国密证书认证信息的标识为“CN=TEST1”,认证信息的标识为“CN=TEST1”,签名程序查找到国密证书认证信息的标识中包含和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息相匹配,若获取到的国密证书认证信息的标识为“CN=TEST2”,签名程序查找国密证书认证信息的标识中不含有和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息不匹配,则释放当前设备容器私有CSP句柄,返回步骤413;
步骤420:签名程序根据当前设备容器私有CSP句柄、国密算法密钥句柄、预设国密签名算法标识、摘要算法标识和待签数据,获取国密签名数据,将国密签名数据返回给服务器。
本步骤具体包括:
步骤d1:签名程序调用主机操作系统的第五接口函数,将当前设备容器私有CSP句柄和国密算法密钥句柄和摘要算法标识传递给相应中间件的第五函数,获取哈希句柄;
本实施例中,第五接口函数可以是CryptCreateHash函数,第五函数可以是CPCreateHash函数。
当第五函数获取到合法的当前设备容器私有CSP句柄和国密算法密钥句柄和摘要算法标识时,初始化一个哈希对象实例,将哈希对象实例的地址赋值给哈希句柄,输出哈希句柄并返回成功标识。
步骤d2:签名程序调用主机操作系统的第六接口函数,将当前设备容器私有CSP句柄和哈希句柄和待签数据传递给相应中间件的第六函数,获取摘要值,判断是否获取到摘要值,如果是,则执行步骤d3;否则,报错退出;
本实施例中,第六接口函数可以是CryptHashData函数,第六函数可以是CPHashData函数。
具体地,签名程序根据返回值是否为成功标识,判断是否获取到摘要值,如果得到的返回值为成功标识,则判断获取到摘要值;否则,判断没有获取到摘要值。
当第六函数获取到哈希句柄时,第六函数根据哈希句柄查找哈希对象,如果查找到,则用哈希句柄对待签数据做哈希,获取摘要值并保存待签数据,返回成功标识;否则,返回失败标识。
步骤d3:签名程序调用主机操作系统的第七接口函数,将当前设备容器私有CSP句柄和哈希句柄和预设国密签名算法标识传递给相应中间件的第七函数,获取签名数据,判断是否获取到签名数据,是则将签名数据返回给服务器;否则报错退出。
本实施中,第七接口函数可以是CryptSignHash函数,第七函数可以是CPSignHash函数。
当第七函数获取到当前设备容器私有CSP句柄和哈希句柄和国密签名算法标识时,第七函数判断是否验证过当前设备PIN码,如果验证过当前设备PIN码,则执行步骤e1;如果没有验证过设备PIN码,则输出提示验证设备PIN码信息,当获取到合法的当前设备PIN码时,则执行步骤e1;
步骤e1:第七函数获取国密Z值,当当前设备是一代设备时,根据国密Z值和摘要值获取最终待签数据,将最终待签数据发给当前设备,获取签名数据,输出签名数据并返回成功标识,如果没有获取到签名数据,则返回失败标识;当当前设备是二代设备时,根据国密Z值和待签数据获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,输出国密签名数据并返回成功标识,如果没有获取到国密签名数据,则返回失败标识。
还需说明的是,当签名程序获取到服务器发送的证书类型信息时,签名程序根据证书类型信息中的预设证书类型标识判断本次签名所使用的证书类型,如果,预设证书类型标识是预设非国密证书类型标识,则使用非国密证书获取签名数据,返回给服务器;如果,预设证书类型标识是预设国密证书类型标识,则,签名程序还可以执行如下步骤:
签名程序根据私有CSP名获取中间件私有CSP句柄,根据中间件私有CSP句柄获取第一容器名,当获取到第一容器名,将第一容器名作为当前容器名之后,执行步骤409。
实施例3
本发明实施例3提供了一种定位国密证书的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统。
本实施例中,上层应用可以是签名程序。
步骤501:服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,服务器根据选择的证书类型向签名程序发送证书类型信息,等待获取签名数据,若获取到的用户信息不合法,则输出错误提示信息;
其中,证书类型包括国密证书类型和非国密证书类型;证书类型信息包括国密证书类型信息和非国密证书类型信息;签名数据包括国密签名数据和非国密签名数据。
具体地,服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型是国密证书时,服务器根据用户信息获取私有CSP名和认证信息和国密密钥容器名并将预设国密证书类型标识和私有CSP名和认证信息和国密密钥容器名和待签数据作为国密证书类型信息发送给签名程序,等待获取国密签名数据;当选择的证书类型是非国密证书类型时,将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给签名程序,等待获取非国密签名数据,若获取到的用户信息不合法,则输出错误提示信息;
其中,非国密证书类型可以是RSA证书类型。
本实施例中,认证信息可以是与用户信息绑定的国密证书DN(DistinguishedName,甄别名)信息。
例如,服务器获取与用户信息绑定的国密证书的DN信息,获取到DN信息中的CN(Common name,常用名)属性信息为“CN=TEST1”,将“CN=TEST1”作为认证信息的标识。
其中,服务器可以根据用户信息查询服务器预设数据库获取和用户信息绑定的私有CSP名和国密密钥容器名。
其中,私有CSP名是指智能密钥设备提供商的信息,例如“EnterSafe ET199AutoCSP V1.0”。
本实施例中,当签名程序获取到服务器发送的证书类型信息时,签名程序根据证书类型信息中的预设证书类型标识判断本次签名所使用的证书类型,如果,预设证书类型标识是预设非国密证书类型标识,则根据注册到浏览器的证书存储区中的非国密证书,按照正常的签名流程获取签名数据,返回给服务器;如果,预设证书类型标识是预设国密证书类型标识,则签名程序执行如下步骤:
步骤601:签名程序根据私有CSP名和国密密钥容器名获取当前设备容器私有CSP句柄;
具体地,签名程序调用主机操作系统第一接口函数,根据私有CSP名将国密密钥容器名传递给中间件的第一函数,获取当前设备容器私有CSP句柄;
当中间件的第一函数获取到国密密钥容器名时,第一函数执行如下步骤:
步骤x1:第一函数解析国密密钥容器名,获取设备名和设备容器名,判断设备名是否为不为空,如果是,则执行步骤x2;否则,执行步骤x6;
例如:第一函数解析国密密钥容器名,获取到\\.\ES2001 VCR 1\le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D,其中ES2001 VCR 1为设备名,le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D为设备容器名。
步骤x2:第一函数查找是否存在和设备名相匹配的智能密钥设备,如果是,则执行步骤x3;否则,返回失败标识,结束。
本实施中,失败标识可以是FALSE。
步骤x3:第一函数查找和设备名相匹配的智能密钥设备中是否存在和设备容器名相匹配的容器,如果是,则执行步骤x4;否则,返回失败标识,结束。
具体地,获取连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中是否存在以设备容器名为容器名的容器,如果存在,则判断存在和设备容器名相匹配的智能密钥设备,否则,判断不存在和设备容器名相匹配的智能密钥设备。
步骤x4:第一函数将和设备名相匹配的智能密钥设备作为当前设备,保存当前设备ID;
步骤x5:第一函数将一个无符号长整型数值设置为当前设备容器私有CSP句柄,输出当前设备容器私有CSP句柄,返回成功标识,结束。
本实施中,成功标识可以是TRUE。
步骤x6:第一函数检查否存在和设备容器名相匹配的智能密钥设备,如果是,则执行步骤x7;否则,返回失败标识,结束。
步骤x7:第一函数判断是否查找到唯一和设备容器名相匹配的智能密钥设备,如果是,则执行步骤x12;否则,执行步骤x9;
步骤x9:第一函数判断是否需要输出提示选择智能密钥设备信息,如果是,则执行步骤x10;否则,执行步骤x11;
步骤x10:第一函数输出需要用户选择智能密钥设备的提示信息,将用户选择的智能密钥设备作为当前设备,保存当前设备ID,返回步骤x5;
步骤x11:第一函数将查找到的第一个和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,返回步骤x5;
步骤x12:第一函数将唯一和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,返回步骤x5;
步骤602:签名程序判断是否获取到当前设备容器私有CSP句柄,如果是,则执行步骤603;否则,报错退出;
具体地,签名程序判断得到的返回值是否为成功标识,如果是,则判断获取到当前设备容器私有CSP句柄;否则,判断没有获取到当前设备容器私有CSP句柄,报错退出。
本步骤中,签名程序还可以根据获取到的当前设备容器私有CSP句柄是否为空来判断是否获取到当前设备容器私有CSP句柄,如果获取到的当前设备容器私有CSP句柄不为空,则判断获取到当前设备容器私有CSP句柄,如果获取到的当前设备容器私有CSP句柄为空,则判断没有获取到中间件私有CSP句柄,报错退出。
本实施例中,签名程序根据获取到的当前设备容器私有CSP句柄可以定位到当前设备中的容器名为国密密钥容器名的容器。
步骤603:签名程序根据当前设备容器私有CSP句柄和预设国密签名算法标识获取当前设备中的容器名为国密密钥容器名的容器中的国密算法密钥句柄;
具体地,签名程序调用主机操作系统第三接口函数,将当前设备容器私有CSP句柄和预设国密签名算法标识传递给中间件的第三函数,获取当前设备中的容器名为国密密钥容器名的容器中的国密算法密钥句柄;
本实施例中,第三接口函数可以是CryptGetUserKey函数,第三函数可以是CPGetUserKey函数。
本步骤中,签名程序调用CryptGetUserKey函数,将当前密钥容器私有CSP句柄和国密签名算法标识传递给相应中间件的CPGetUserKey函数,获取国密算法密钥句柄。
需要说明的是,当第三函数获取到当前设备容器私有CSP句柄和国密用法密钥算法标识时,第三函数根据当前设备容器私有CSP句柄和国密用法密钥算法标识查找当前设备中的容器名为国密密钥容器名的容器中是否存在国密签名算法密钥,如果查找到,则将预设国密签名算法密钥句柄赋值给国密算法密钥句柄,输出国密算法密钥句柄并返回成功标识;否则,返回失败标识。
其中,预设国密签名算法密钥句柄是一个无符号长整型数值。
步骤604:签名程序判断是否获取到国密算法密钥句柄,如果是,则执行步骤605;否则,报错退出;
具体地,签名程序判断获取到国密算法密钥句柄是否为空值,如果获取到的国密算法密钥句柄不为空值,则判断获取到国密算法密钥句柄;否则,报错退出;
本步骤中,签名程序还可以根据得到的返回值是否为成功标识,判断是否获取到国密算法密钥句柄,如果为成功标识,则判断获取国密算法密钥句柄;否则,没有获取到国密算法密钥句柄。
步骤605:签名程序根据当前设备容器私有CSP句柄和国密算法密钥句柄获取当前设备中的容器名为国密密钥容器名的容器中的国密证书数据;
具体地,签名程序调用主机操作系统第四接口函数,将当前设备容器私有CSP句柄和国密算法密钥句柄传递给中间件的第四函数,获取国密证书数据;
本实施例中,第四接口函数可以是CryptGetKeyParam函数,第四函数可以是CPGetKeyParam函数。
需要说明的是,当第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,第四函数查找到当前设备中的容器名为国密密钥容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出国密证书数据,并且返回成功标识;否则返回失败标识。
步骤606:签名程序判断是否获取到国密证书数据,如果是,则执行步骤607;否则,报错退出;
具体地,签名程序根据获取到的国密证书数据是否不为空,且得到的返回值是否为成功标识,判断获取到国密证书数据,根据得到的返回值为失败标识,判断没有获取到国密证书数据。
步骤607:签名程序根据国密证书数据获取国密证书上下文结构体;
具体地,签名程序调用主机操作系统的解析证书函数,根据国密证书数据获取国密证书上下文结构体;
本实施例中,解析证书函数可以是CertCreateCertificateContext函数。
步骤608:签名程序根据国密证书上下文结构体获取国密证书认证信息;
具体地,签名程序调用主机操作系统的证书名转换格式函数,根据国密证书上下文结构体获取国密证书认证信息;
本实施例中,证书名转换格式函数可以是CertNameToStr函数。
本步骤中,签名程序获取到的国密证书认证信息可以是国密证书的DN信息。
例如,签名程序根据国密证书上下文结构体调用主机操作系统提供的CertNameToStr函数获取国密证书的DN信息,获取到DN信息中的CN属性信息为“CN=TEST1”,将CN属性信息作为国密证书认证信息的标识。
步骤609:签名程序判断国密证书认证信息是否和认证信息相匹配,如果是,则执行步骤610;否则,报错退出;
具体地,签名程序查找国密证书认证信息的标识中是否包含和认证信息的标识一致的标识信息,如果是,则匹配;否则,不匹配。
例如,若获取到的国密证书认证信息的标识为“CN=TEST1”,认证信息的标识为“CN=TEST1”,签名程序查找到国密证书认证信息的标识中包含和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息相匹配,若获取到的国密证书认证信息的标识为“CN=TEST2”,签名程序查找国密证书认证信息的标识中不含有和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息不匹配。
步骤610:签名程序获取国密签名数据,向服务器返回国密签名数据。
本实施例中,签名程序在执行步骤601之前,签名程序还可以执行步骤t1,
步骤t1:签名程序根据私有CSP名和预设容器名获取中间件私有CSP句柄;
步骤t2:签名程序判断是否获取到中间件私有CSP句柄,如果是,则执行步骤t3;否则,报错退出;
具体地,签名程序判断得到的返回值是否为成功标识,如果是,则判断获取到中间件私有CSP句柄;否则,判断没有获取到中间件私有CSP句柄,报错退出。
本步骤中,签名程序还可以根据获取到的中间件私有CSP句柄是否为空来判断是否获取到中间件私有CSP句柄,如果获取到的中间件私有CSP句柄不为空,则判断获取到中间件私有CSP句柄,如果获取到的中间件私有CSP句柄为空,则判断没有获取到中间件私有CSP句柄,报错退出。
本实施中,签名程序根据获取到的中间件私有CSP句柄可以定位到智能密钥设备提供商提供的中间件。
步骤t3:签名程序设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数,将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,枚举中间件的预设算法列表,获取中间件的预设算法列表中的第一算法标识;
本实施例中,第二接口函数可以是CryptGetProvParam函数,第二函数可以是CPGetProvParam函数;中间件的预设算法列表中包括中间件支持的所有算法的算法标识。
其中,中间件的预设算法列表中的算法标识可以是国密算法标识、哈希算法标识、RSA算法标识等,其中,国密算法标识可以是SM2_SIGN、SM2_KEYX,哈希算法标识可以是SM3、MD5、SHA1,RSA算法标识可以是RSA,需要说明的是,其中,SM2_SIGN是国密签名算法标识,哈希算法标识中的SM3是与国密签名算法标识SM2_SIGN相应的摘要算法标识。
本步骤中,签名程序设置第一枚举算法参数包括设置第一枚举算法类型参数和第一枚举算法标志位参数,具体地,设置第一枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第一枚举算法标志位参数为CRYPT_FIRST。
具体地,当中间件的第二函数获取到枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,枚举算法标志位参数为CRYPT_FIRST时,第二函数获取预设算法列表中的第一个算法标识,复位计数器,判断第一算法标识是否存在,如果是,输出第一算法标识并返回成功标识;否则,返回失败标识。
本实施例中,失败标识可以是FALSE,第二函数设置计数器初始值为0。
步骤t4:签名程序判断是否获取到中间件的预设算法列表中的第一算法标识,如果是,则将第一算法标识作为当前算法标识,执行步骤t5;否则,报错退出;
具体地,签名程序根据获取到的第一算法标识不为空且得到的返回值为成功标识,判断获取到中间件的预设算法列表中的第一算法标识,根据得到的返回值为失败标识,判断没有获取到中间件的预设算法列表中的第一算法标识。
步骤t5:签名程序设置当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数,将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,枚举中间件的预设算法列表,获取当前算法标识的下一个算法标识;
本步骤中,签名程序设置第二枚举算法参数包括设置第二枚举算法类型参数和第二枚举算法标志位参数,具体地,设置第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第二枚举算法标志位参数为CRYPT_NEXT。
当第二函数获取到第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX、第二枚举算法标志位参数为CRYPT_NEXT时,第二函数将计数器加1,获取预设算法列表中和当前计数器数值所对应的算法标识,判断预设算法列表中和当前计数器数值所对应的算法标识是否存在,如果存在,则将和当前计数器数值所对应的算法标识作为当前算法标识的下一个算法标识,输出当前算法标识的下一个算法标识,并返回成功标识;否则,返回失败标识。
步骤t6:签名程序判断是否获取到当前算法标识的下一个算法标识,如果是,则将当前算法标识的下一个算法标识作为当前算法标识,返回步骤t5;否则,执行步骤601。
实施例4
本实施例提供了一种定位国密证书的装置,如图9所示,包括:
本实施中,第一函数可以是CPAcquireContext函数;第二函数可以是CPGetProvParam函数;第三函数可以是CPGetUserKey函数;第四函数可以是CPGetKeyParam函数;第五函数可以是CPCreateHash函数;第六函数可以是CPHashData函数;第七函数可以是CPSignHash函数。
第一判断模块10-1,用于当中间件的第一函数被调用时,判断获取到的当前容器名是否为空,如果是,则触发第一获取模块20-1;否则,触发第二获取模块20-2;
第一判断模块10-1,具体用于根据当前容器参数判断当前容器名是否为空。
第一获取模块20-1,用于获取中间件私有CSP句柄,触发第一输出模块30-1;
第一获取模块20-1,具体用于当当前容器名为空时,将一个无符号长整型数值设置为中间件私有CSP句柄。
第一输出模块30-1,用于输出中间件私有CSP句柄和成功标识;
本实施例中,成功标识可以是TRUE。
第二获取模块20-2,用于根据当前容器名获取设备名和设备容器名,根据设备名和设备容器名定位当前设备,触发第二判断模块10-2;
第二判断模块10-2,用于判断是否定位到当前设备,如果是,则触发第三获取20-3模块;否则,触发第二输出模块30-2;
第三获取20-3模块,用于根据当前设备设置当前设备容器私有CSP句柄,触发第三输出模块30-3;
第二输出模块30-2,用于输出失败标识;
第三输出模块30-3,用于输出当前设备容器私有CSP句柄和成功标识;
本实施例中,失败标识可以是FALSE。
本实施例中,第二获取模块20-2,包括:第一获取单元、第二获取单元和第三获取单元;第二判断模块10-2,包括:第一判断单元、第二判断单元、第三判断单元和第四判断单元;
第一获取单元,用于根据当前容器名获取设备名和设备容器名,判断设备名是否不为空,如果是,则触发第三获取单元;否则,触发第二获取单元;
第一获取单元,具体用于解析当前容器名,根据解析的结果获取设备名和设备容器名,判断设备名是否为不为空,如果是,则第三获取单元;否则,触发第二获取单元;
例如:解析当前容器名,获取到\\.\ES2001 VCR 1\le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D,其中ES2001 VCR 1为设备名,le-8A9CF4C7-D8E2-4a4b-AF0A-CE393A03E80D为设备容器名。
第二获取单元,用于获取和设备名相匹配的智能密钥设备,触发第一判断单元;
第二获取单元,具体用于根据设备名获取连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中和设备名相同的智能密钥设备查找和设备名相匹配的智能密钥设备,触发第一判断单元;
其中,设备信息包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息。
第一判断单元,用于查找和设备名相匹配的智能密钥设备中是否存在和设备容器名相匹配的容器,如果是,则将和设备名相匹配的智能密钥设备作为当前设备,保存当前设备ID,触发第三获取模块20-3;否则,触发第二输出模块30-2。
第三获取单元,用于根据设备容器名获取和设备容器名相匹配的智能密钥设备,触发第二判断单元;
第三获取单元,具体用于获取到连接到主机的全部智能密钥设备的设备信息,查找全部的智能密钥设备中以设备容器名为容器名的容器,触发第二判断单元;
第二判断单元,用于判断是否存在和设备容器名相匹配的智能密钥设备,如果是,则触发第三判断单元;否则,触发第二输出模块30-2;
第二判断单元,具体用于判断是否存在以设备容器名为容器名的容器,如果是,则将全部智能密钥设备中以设备容器名为容器名的容器的智能密钥设备作为和设备容器名相匹配的智能密钥设备,判断是存在和设备容器名相匹配的智能密钥设备,否则,判断不存在。
第三判断单元用于判断是否查找到唯一和设备容器名相匹配的智能密钥设备,如果是,则将唯一和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,触发第三获取模块20-3;否则,触发第四判断单元;
第四判断单元,用于判断是否需要输出提示选择智能密钥设备信息,如果需要输出提示选择智能密钥设备信息,则输出提示选择智能密钥设备信息,当获取到外部选择的智能密钥设备时,将外部选择的智能密钥设备作为当前设备,保存当前设备ID,触发第三获取模块20-3;如果不需要输出提示选择智能密钥设备信息,则将查找到的第一个和设备容器名相匹配的智能密钥设备作为当前设备,保存当前设备ID,触发第三获取模块20-3;
第三判断模块10-3,用于当中间件的第二函数被调用时,判断获取到的当前枚举参数的类型,若当前枚举参数的类型是枚举容器参数类型,触发第四获取模块20-4;若当前枚举参数的类型是枚举算法参数类型,触发第八获取模块20-8;
本实施例中,枚举算法参数包括:第一枚举算法参数和第二枚举算法参数;枚举容器参数包括:第一枚举容器参数和第二枚举容器参数;
第四获取模块20-4,用于获取与主机连接的智能密钥设备的容器名列表,获取容器名列表中的当前容器名,触发第四判断模块10-4;
第四判断模块10-4,用于判断当前容器名是否存在,如果是,则触发第四输出模块30-4;否则,触发第五输出模块30-5;
第四输出模块30-4,用于输出当前容器名和成功标识;
第五输出模块30-5,用于输出失败标识;
本实施例中,第四获取模块20-4,包括第六获取单元和第七获取单元;
第四判断模块10-4,包括第七判断单元和第八判断单元;
第六获取单元,具体用于当枚举容器参数类型是第一枚举容器参数时,获取与主机连接的智能密钥设备的容器名列表,获取容器名列表中的第一容器名,触发第七判断单元;
第七获取单元,用于当枚举容器参数类型是第二枚举容器参数时,获取容器名列表中的当前容器名的下一个容器名,触发第八判断单元;
第七判断单元,用于当枚举容器参数类型是第一枚举容器参数时,判断第一容器名是否存在,如果是,则将第一容器名作为当前容器名,触发第四输出模块30-4;否则,触发第五输出模块30-5;
第八判断单元,用于当枚举容器参数类型是第二枚举容器参数时,判断当前容器名的下一个容器名是否存在,如果是,则将当前容器名的下一个容器名作为当前容器名,触发第四输出模块30-4;否则,触发第五输出模块30-5;
第八获取模块20-8,用于获取中间件的预设算法列表中的当前算法标识,触发第九判断模块10-9;
本实施例中,中间件的预设算法列表中包括中间件支持的所有算法的算法标识。其中,中间件的预设算法列表中的算法标识可以是国密算法标识、哈希算法标识、RSA算法标识等,其中,国密算法标识可以是SM2_SIGN、SM2_KEYX,哈希算法标识可以是SM3、MD5、SHA1,RSA算法标识可以是RSA,需要说明的是,其中,SM2_KEYX是国密交换算法标识、SM2_SIGN是国密签名算法标识,哈希算法标识中的SM3是与国密签名算法标识SM2_SIGN相应的摘要算法标识。
第九判断模块10-9,用于判断当前算法标识是否存在,如果是,则触发第十输出模块30-10;否则,触发第五输出模块30-5;
第十输出模块30-10,用于输出当前算法标识和成功标识。
本实施中,第八获取模块20-8,包括第四获取单元和第五获取单元;
第九判断模块10-9,包括第五判断单元和第六判断单元;
第四获取单元,用于当枚举算法参数类型是第一枚举算法参数时,获取中间件的预设算法列表中的第一算法标识,触发第五判断单元;
第五获取单元,用于当枚举算法参数类型是第二枚举算法参数时,获取中间件的预设算法列表中的当前算法标识的下一个算法标识,触发第六判断单元;
第五判断单元,用于当枚举算法参数类型是第一枚举算法参数时,判断当前算法标识的下一个算法标识是否存在,如果是,则将当前算法标识的下一个算法标识作为当前算法标识,触发第十输出模块30-10;否则,触发第五输出模块30-5;
第六判断单元,用于当枚举算法参数类型是第二枚举算法参数时,判断当前算法标识的下一个算法标识是否存在,如果是,则将当前算法标识的下一个算法标识作为当前算法标识,触发第十输出模块30-10;否则,触发第五输出模块30-5。
第五判断模块10-5,用于当中间件的第三函数被调用时,判断获取到的当前设备容器私有CSP句柄和国密算法标识是否合法,如果是,则触发第五获取模块20-5;否则,触发第六输出模块30-6;
第六输出模块,用于输出失败标识;
第五获取模块20-5,用于根据当前设备容器私有CSP句柄和国密算法标识,查找当前设备的容器名为当前容器名的容器,获取国密用法密钥,触发第六判断模块10-6;
本实施例中,国密算法标识包括国密签名算法标识、国密交换算法标识。
第六判断模块10-6,用于判断是否获取到国密用法密钥,如果是,则触发第六获取模块20-6;否则,触发第六输出模块30-6;
第六判断模块10-6,具体用于判断根据当前设备容器私有CSP句柄和国密算法标识查找当前设备中的容器名为当前容器名的容器中是否存在国密用法密钥,如果是,则判断获取到国密用法密钥;否则,判断没有获取到国密用法密钥。
第六获取模块20-6,用于将预设国密用法密钥句柄作为国密算法密钥句柄,触发第七输出模块30-7;
第七输出模块30-7,用于输出国密算法密钥句柄和成功标识;
本实施中,第五获取模块,具体用于根据当前设备容器私有CSP句柄和国密签名算法标识,查找当前设备中的容器名为当前容器名的容器中获取国密签名算法密钥,触发第六判断模块10-6;
第六判断模块10-6,具体用于判断是否获取到国密签名算法密钥,如果是,则触发第六获取模块;否则,触发第六输出模块30-6;
第六获取模块20-6,具体用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发第七输出模块30-7;
第七判断模块10-7,用于当中间件的第四函数被调用时,判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄是否合法,如果是,则触发第七获取模块20-7;否则,触发第八输出模块30-8;
第八输出模块30-8,用于输出失败标识;
第七获取模块20-7,用于根据当前设备容器私有CSP句柄和国密算法密钥句柄查找到当前设备中的容器名为当前容器名的容器,获取容器中的国密证书数据,触发第八判断模块10-8;
第八判断模块10-8,用于判断是否读取到合法的国密证书数据,如果是,则触发第九输出模块30-9;否则触发第八输出模块30-8;
第九输出模块30-9,输出国密证书数据和返回成功标识。
第十判断模块10-10,用于当中间件的第五函数被调用时,判断获取到的当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识是否合法,如果是,则触发第九获取模块20-9;否则,触发第十二输出模块30-12;
第九获取模块20-9,用于初始化一个哈希对象实例,将哈希对象实例的地址作为哈希句柄,触发第十一输出模块30-11;
第十一输出模块30-11,用于输出哈希句柄和成功标识;
第十二输出模块30-12,用于输出失败标识;
第十一判断模块10-11,用于当中间件的第六函数被调用时,判断获取到的当前设备容器私有CSP句柄、哈希句柄和待签数据是否合法,如果是,则触发第十获取模块20-10;否则,触发第十三输出模块30-13;
第十三输出模块30-13,用于触发成功标识;
第十获取模块20-10,用于用哈希句柄对待签数据做摘要,获取摘要值并保存待签数据,触发第十四输出模块30-14;
第十四输出模块30-14,用于输出成功标识;
第十二判断模块10-12,于当中间件的第七函数被调用时,判断获取到的当前设备容器私有CSP句柄、哈希句柄和国密签名算法标识是否合法,如果是,则触发第十一获取模块20-11;否则,触发第十五输出模块30-15;
第十一获取模块20-11,用于获取国密签名数据,触发第十六输出模块30-16;
第十五输出模块30-15,用于输出失败标识;
第十六输出模块30-16,用于输出国密签名数据和成功标识。
本实施例中,第十一获取模块20-11,具体用于判断是否验证过当前设备PIN码,如果验证过当前设备PIN码,则获取国密Z值,
当当前设备是一代设备时,根据国密Z值和哈希句柄获取的摘要值获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,触发第十六输出模块30-16;如果没有获取到国密签名数据,则触发第十五输出模块30-15;
当当前设备是二代设备时,根据国密Z值和待签数据获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,触发第十六输出模块30-16;如果没有获取到国密签名数据,则触发第十五输出模块30-15。
如果没有验证过设备PIN码,则输出提示验证设备PIN码信息,当获取到合法的当前设备PIN码时,则获取国密Z值,
当当前设备是一代设备时,根据国密Z值和哈希句柄获取的摘要值获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,触发第十六输出模块30-16;如果没有获取到国密签名数据,则触发第十五输出模块30-15;
当当前设备是二代设备时,根据国密Z值和待签数据获取最终待签数据,将最终待签数据发送给当前设备,获取国密签名数据,触发第十六输出模块30-16;如果没有获取到国密签名数据,则触发第十五输出模块30-15。
实施例5
本实施例提供了一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备;
当中间件的注册证书模块检测到智能密钥设备连接到主机时,中间件的注册证书模块获取智能密钥设备的设备信息和证书列表,中间件遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程。
其中,设备信息中包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息;
证书列表包括智能密钥设备中的证书信息,其中证书信息可以是证书的版本信息、证书的序列号信息、证书所使用的签名算法信息、证书的发行机构名称信息、证书的有效期信息、证书所有人的名称信息、证书所有人的公钥信息和证书发行者对证书的签名信息等。
服务器第一获取模块F1-1,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块F2-1;
服务器第一判断模块F2-1,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块F2-2;
服务器第二判断模块F2-2,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块F1-2;当服务器选择的证书类型为非国密证书类型时,触发服务器第二发送模块F3-2;
服务器第二获取模块F1-2,用于根据用户信息获取私有CSP名和认证信息,触发服务器第一发送模块F3-1;
服务器第一发送模块F3-1,用于将预设国密证书类型标识、私有CSP名、认证信息和待签数据作为国密证书类型信息发送给上层应用,等待获取上层应用返回的国密签名数据;
服务器第二发送模块F3-2,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给上层应用,等待获取上层应用返回的非国密签名数据;
其中,证书类型包括国密证书类型和非国密证书类型;证书类型信息包括国密证书类型信息和非国密证书类型信息;签名数据包括国密签名数据和非国密签名数据,其中,非国密证书类型可以是RSA证书类型。
本实施例中,认证信息可以是与用户信息绑定的国密证书DN(DistinguishedName,甄别名)信息。
例如,服务器获取与用户信息绑定的国密证书的DN信息,获取到DN信息中的CN(Common name,常用名)属性信息为“CN=TEST1”,将“CN=TEST1”作为认证信息的标识。
其中,私有CSP名是指智能密钥设备提供商的信息,例如“EnterSafe ET199AutoCSP V1.0”。
本实施例中,上层应用可以是签名程序。
上层应用第一接收模块S1-1,用于接收国密证书类型信息,触发上层应用第一获取模块S2-1;
上层应用第二接收模块,用于接收非国密证书类型信息,触发上层应用第九获取模块S2-9;
上层应用第一获取模块S2-1,用于当获取到国密证书类型信息时,上层应用调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给中间件的第一函数,获取中间件私有CSP句柄,触发上层应用第二获取模块S2-2;
本步骤中,预设容器名为NULL。
本实施例中,主机操作系统可以是微软提供的Windows操作系统。
本实施例中,第一接口函数的可以是CryptAcquireContext函数,第一函数可以是CPAcquireContext函数。
本实施中,根据获取到的中间件私有CSP句柄可以定位到智能密钥设备提供商提供的中间件。
上层应用第九获取模块S2-9,用于根据注册到浏览器的证书存储区中的非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块S3-2;
上层应用第二返回模块S3-2,用于向服务器返回非国密签名数据。
上层应用第二获取模块S2-2,用于设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,获取容器名列表中的第一容器名,触发上层应用第一判断模块S4-1;
本实施例中,第二接口函数可以是CryptGetProvParam函数,第二函数可以是CPGetProvParam函数;
其中,设置当前枚举参数为第一枚举容器参数,具体包括设置第一枚举容器参数包括设置第一枚举容器类型参数和第一枚举容器标志位参数,设置第一枚举容器类型参数为PP_ENUMCONTAINERS,设置第一枚举容器标志位参数为CRYPT_FIRST。
上层应用第一判断模块S4-1,用于判断是否获取到第一容器名,如果是,则将第一容器名作为当前容器名,触发上层应用第三获取模块S2-3;否则,触发上层应用报错模块S5-1;
上层应用报错模块S5-1,用于报错退出;
上层应用第三获取模块S2-3,用于调用主机操作系统的第一接口函数根据中间件私有CSP句柄,将当前容器名作为当前容器参数传递给中间件的第一函数,获取当前设备容器私有CSP句柄,触发上层应用第二判断模块S4-2;
上层应用第二判断模块S4-2,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第四获取模块S2-4;否则,触发上层应用报错模块S5-1;
本实施例中,根据获取到的当前设备容器私有CSP句柄可以定位到当前设备中的容器名为当前容器名的容器。
上层应用第四获取模块S2-4,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给中间件的第三函数获取当前设备的容器名为当前容器名的容器中的国密算法密钥句柄,触发上层应用第三判断模块S4-3;
本实施例中,第三接口函数可以是CryptGetUserKey函数,第三函数可以是CPGetUserKey函数。
上层应用第三判断模块S4-3,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第五获取模块S2-5;否则,触发上层应用报错模块S5-1;
上层应用第五获取模块S2-5,用于调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给中间件的第四函数获取当前设备的容器名为当前容器名的容器中的国密证书数据,触发上层应用第四判断模块S4-4;
本实施例中,第四接口函数可以是CryptGetKeyParam函数,第四函数可以是CPGetKeyParam函数。
上层应用第四判断模块S4-4,用于判断是否获取到国密证书数据,如果是,则触发上层应用第六获取模块S2-6;否则,触发上层应用报错模块S5-1;
上层应用第六获取模块S2-6,用于根据国密证书数据获取国密证书认证信息,触发上层应用第五判断模块S4-5;
上层应用第六获取模块S2-6,包括:上层应用第一获取单元和上层应用第二获取单元;
上层应用第一获取单元,用于调用主机操作系统的解析证书函数根据国密证书数据获取国密上下文结构体;
上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据国密证书上下文结构体获取国密证书认证信息。
本实施例中,解析证书函数可以是CertCreateCertificateContext函数,证书名转换格式函数可以是CertNameToStr函数。
本步骤中,获取到的国密证书认证信息可以是国密证书的DN信息。
例如,根据国密证书上下文结构体调用主机操作系统提供的CertNameToStr函数获取国密证书的DN信息,获取到DN信息中的CN属性信息为“CN=TEST1”,将CN属性信息作为国密证书认证信息的标识。
上层应用第五判断模块S4-5,用于判断国密证书认证信息是否和认证信息相匹配,如果是,则触发上层应用第七获取模块S2-7;否则,释放当前设备容器私有CSP句柄,触发上层应用第八获取模块S2-8;
上层应用第五判断模块S4-5,具体用于查找国密证书认证信息的标识中是否包含和认证信息的标识一致的标识信息,如果是,则匹配;否则,不匹配。
例如,若获取到的国密证书认证信息的标识为“CN=TEST1”,认证信息的标识为“CN=TEST1”,上层应用第五判断模块S4-5查找到国密证书认证信息的标识中包含和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息相匹配,若获取到的国密证书认证信息的标识为“CN=TEST2”,上层应用第五判断模块S4-5查找国密证书认证信息的标识中不含有和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息不匹配,则释放当前设备容器私有CSP句柄,触发上层应用第八获取模块S2-8;
上层应用第七获取模块S2-7,用于获取国密签名数据,触发上层应用第一返回模块S3-1;
上层应用第七获取模块S2-7,包括上层应用第三获取单元、上层应用第四获取单元和上层应用第五获取单元;
上层应用第三获取单元,用于调用主机操作系统的第五接口函数,将当前设备容器私有CSP句柄、国密算法密钥句柄和预设摘要算法标识传递给中间件的第五函数,获取哈希句柄,触发上层应用第四获取单元;
本实施例中,第五接口函数可以是CryptCreateHash函数,第五函数可以是CPCreateHash函数。
上层应用第四获取单元,用于调用主机操作系统的第六接口函数,将当前设备容器私有CSP句柄、哈希句柄和待签数据传递给中间件的第六函数,获取摘要值,触发上层应用第五获取单元;
本实施例中,第六接口函数可以是CryptHashData函数,第六函数可以是CPHashData函数。
上层应用第五获取单元,用于调用主机操作系统的第七接口函数,将当前设备容器私有CSP句柄、哈希句柄和预设国密签名算法标识传递给中间件的第七函数,获取国密签名数据,触发上层应用第一返回模块S3-1。
本实施中,第七接口函数可以是CryptSignHash函数,第七函数可以是CPSignHash函数。
上层应用第一返回模块S3-1,用于向服务器返回国密签名数据;
上层应用第八获取模块S2-8,用于设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,获取容器名列表中的当前容器名的下一个容器名,触发上层应用第六判断模块S4-6;
其中,设置第二枚举容器参数包括设置第二枚举容器类型参数和第二枚举容器标志位参数,设置第二枚举容器类型参数为PP_ENUMCONTAINERS,设置第二枚举容器标志位参数为CRYPT_NEXT。
上层应用第六判断模块S4-6,用于判断是否获取到当前容器名的下一个容器名,如果是,则将当前容器名的下一个容器名作为当前容器名,触发上层应用第三获取模块S2-5,否则,触发上层应用报错模块S5-1。
本实施例中,系统还包括:
上层应用第十获取模块S2-10,用于当上层应用第一获取模块S2-1获取中间件私有CSP句柄之后,触发上层应用第二获取模块S2-2之前,设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,获取中间件的预设算法列表中的第一算法标识,触发上层应用第七判断模块S4-7;
本实施例中,中间件的预设算法列表中包括中间件支持的所有算法的算法标识。
其中,中间件的预设算法列表中的算法标识可以是国密算法标识、哈希算法标识、RSA算法标识等,其中,国密算法标识可以是SM2_SIGN、SM2_KEYX,哈希算法标识可以是SM3、MD5、SHA1,RSA算法标识可以是RSA,需要说明的是,其中,SM2_SIGN是国密签名算法标识,哈希算法标识中的SM3是与国密签名算法标识SM2_SIGN相应的摘要算法标识。
其中,设置第一枚举算法参数包括设置第一枚举算法类型参数和第一枚举算法标志位参数,具体地,设置第一枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第一枚举算法标志位参数为CRYPT_FIRST。
上层应用第七判断模块S4-7,用于判断是否获取到第一算法标识,如果是,则将第一算法标识作为当前算法标识,触发上层应用第十一获取模块S2-11;否则,触发上层应用报错模块S5-1;
上层应用第十一获取模块S2-11,用于设置当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数获取中间件的预设算法列表中的当前算法标识的下一算法标识,触发上层应用第八判断模块S4-8;
其中,设置第二枚举算法参数包括设置第二枚举算法类型参数和第二枚举算法标志位参数,具体地,设置第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第二枚举算法标志位参数为CRYPT_NEXT。
上层应用第八判断模块S4-8,用于判断是否获取到当前算法标识的下一算法标识,如果是,则将当前算法标识的下一算法标识作为当前算法标识,触发上层应用第十一获取模块S2-11;否则,触发上层应用第九判断模块S4-9;
上层应用第九判断模块S4-9,用于根据获取到的全部算法标识判断中间件是否支持国密算法,如果是,则触发上层应用第二获取模块S2-2;否则触发上层应用报错模块S5-1。
上层应用第九判断模块S4-9,具体用于查找获取到的全部算法标识中是否存在国密签名算法标识,如果是,则判断中间件支持国密算法,则触发上层应用第二获取模块S2-2;否则,判断中间件不支持国密算法,触发上层应用报错模块S5-1。
实施例6
本实施例提供了一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备,
中间件的注册证书模块,用于当中间件的注册证书模块检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,中间件遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程。
其中,设备信息中包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息;
证书列表包括智能密钥设备中的证书信息,其中证书信息可以是证书的版本信息、证书的序列号信息、证书所使用的签名算法信息、证书的发行机构名称信息、证书的有效期信息、证书所有人的名称信息、证书所有人的公钥信息和证书发行者对证书的签名信息等。
服务器第一获取模块F’1-1,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块F’2-1;
服务器第一判断模块F’2-1,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块F’2-2;
服务器第二判断模块F’2-2,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块F’1-2;当服务器选择的证书类型为非国密证书类型时,触发服务器第二发送模块F’3-2;
服务器第二获取模块F’1-2,用于根据用户信息获取私有CSP名和认证信息,触发服务器第一发送模块F’3-1;
服务器第一发送模块F’3-1,用于将预设国密证书类型标识、私有CSP名、认证信息和待签数据作为国密证书类型信息发送给上层应用,等待获取上层应用返回的国密签名数据;
服务器第二发送模块F’3-2,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给上层应用,等待获取上层应用返回的非国密签名数据;
其中,证书类型包括国密证书类型和非国密证书类型;证书类型信息包括国密证书类型信息和非国密证书类型信息;签名数据包括国密签名数据和非国密签名数据,其中,非国密证书类型可以是RSA证书类型。
本实施例中,认证信息可以是与用户信息绑定的国密证书DN(DistinguishedName,甄别名)信息。
例如,服务器获取与用户信息绑定的国密证书的DN信息,获取到DN信息中的CN(Common name,常用名)属性信息为“CN=TEST1”,将“CN=TEST1”作为认证信息的标识。
其中,私有CSP名是指智能密钥设备提供商的信息,例如“EnterSaF’e ET199AutoCSP V1.0”。
本实施例中,上层应用可以是签名程序。
上层应用第一接收模块S’1-1,用于接收国密证书类型信息,触发上层应用第一发送模块S’2-1;
上层应用第二接收模块S’1-2,用于接收非国密证书类型信息,触发上层应用第三获取模块S’5-3;
上层应用第三获取模块S’5-3,用于根据注册到浏览器的证书存储区中的非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块S’6-2;
上层应用第二返回模块S’6-2,用于向服务器返回非国密签名数据。
上层应用第一发送模块S’2-1,用于当获取到国密证书类型信息时,调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给中间件的第一函数,触发中间件第一获取模块Z1-1;
其中,预设容器名为NULL。
本实施例中,主机操作系统可以是微软提供的Windows操作系统。
中间件第一获取模块Z1-1,用于当中间件的第一函数获取到的当前容器参数为预设容器名时,根据预设容器名设置中间件私有CSP句柄,触发中间件第一输出模块Z2-1;
本实施例中,第一接口函数的可以是CryptAcquireContext函数,第一函数可以是CPAcquireContext函数。
中间件第一输出模块Z2-1,用于输出中间件私有CSP句柄和成功标识,触发上层应用第二发送模块S’2-2;
本实施例中,成功标识可以是TRUE。
上层应用第二发送模块S’2-2,用于设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,触发中间件第二获取模块Z1-2;
本实施例中,第二接口函数可以是CryptGetProvParam函数,第二函数可以是CPGetProvParam函数。
其中,设置第一枚举容器参数包括设置第一枚举容器类型参数和第一枚举容器标志位参数,设置第一枚举容器类型参数为PP_ENUMCONTAINERS,设置第一枚举容器标志位参数为CRYPT_FIRST。
中间件第二获取模块Z1-2,用于当中间件的第二函数获取到中间件私有CSP句柄和第一枚举容器参数时,获取与主机连接的智能密钥设备的容器名列表,获取容器名列表中的第一容器名,触发中间件第一判断模块Z3-1;
中间件第二获取模块Z1-2,具体用于当第二函数获取到第一枚举容器类型参数为PP_ENUMCONTAINERS,第一枚举容器标志位参数为CRYPT_FIRST时,获取包含所有智能密钥设备的容器名的容器名列表,第二函数获取容器名列表中的第一个容器名,复位计数器,触发中间件第一判断模块Z3-1;
本实施例中,第二函数设置计数器初始值为0。
中间件第一判断模块Z3-1,用于判断第一容器名是否存在,如果是,则将第一容器名作为当前容器名,触发中间件第二输出模块Z2-2;否则,触发中间件第三输出模块Z2-3;
中间件第二输出模块Z2-2,用于输出当前容器名和成功标识,触发上层应用第一判断模块S’3-1;
中间件第三输出模块Z2-3,用于输出失败标识,触发上层应用第一判断模块S’3-1;
上层应用第一判断模块S’3-1,用于判断是否获取到当前容器名,如果是,则触发上层应用第三发送模块S’2-3;否则,触发上层应用报错模块S’4-1;
上层应用报错模块S’4-1,用于报错退出;
上层应用第三发送模块S’2-3,用于调用主机操作系统的第一接口函数根据中间件私有CSP句柄,将当前容器名作为当前容器参数传递给中间件的第一函数,触发中间件第三获取模块Z1-3;
中间件第三获取模块Z1-3,用于当中间件的第一函数获取到当前容器名时,解析当前容器名,获取设备名和设备容器名,根据设备名和设备容器名定位当前设备,触发中间件第二判断模块Z3-2;
中间件第二判断模块Z3-2,用于判断是否定位到当前设备,如果是,则触发中间件第四获取模块Z1-4;否则,触发中间件第四输出模块Z2-4;
中间件第四获取模块Z1-4,用于根据当前设备设置当前设备容器私有CSP句柄,触发中间件第五输出模块Z2-5;
中间件第五输出模块Z2-5,用于输出当前设备容器私有CSP句柄和成功标识,触发上层应用第二判断模块S’3-2;
中间件第四输出模块Z2-4,用于输出失败标识,触发上层应用第二判断模块S’3-2;
上层应用第二判断模块S’3-2,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第四发送模块S’2-4;否则,触发上层应用报错模块S’4-1;
上层应用第四发送模块S’2-4,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给中间件的第三函数,触发中间件第五获取模块Z1-5;
本实施例中,第三接口函数可以是CryptGetUserKey函数,第三函数可以是CPGetUserKey函数。
中间件第五获取模块Z1-5,用于当中间件的第三函数获取到当前设备容器私有CSP句柄和预设国密算法标识时,根据当前设备容器私有CSP句柄和国密算法标识,查找当前设备的容器名为当前容器名的容器获取国密签名算法密钥,触发中间件第三判断模块Z3-3;
中间件第三判断模块Z3-3,用于判断是否获取到国密签名算法密钥,如果是,则触发中间件第六获取模块Z1-6;否则,触发中间件第七输出模块Z2-7;
中间件第六获取模块Z1-6,用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发中间件第六输出模块Z2-6;
中间件第六输出模块Z2-6,用于输出国密算法密钥句柄和成功标识,触发上层应用第三判断模块S’3-3;
中间件第七输出模块Z2-7,用于输出失败标识,触发上层应用第三判断模块S’3-3;
上层应用第三判断模块S’3-3,用于判断是否获取到国密算法密钥句柄,如果是,在触发上层应用第五发送模块S’2-5;否则,触发上层应用报错模块S’4-1;
上层应用第五发送模块S’2-5,用于调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给中间件的第四函数,触发中间件第七获取模块Z1-7;
本实施例中,第四接口函数可以是CryptGetKeyParam函数,第四函数可以是CPGetKeyParam函数。
中间件第七获取模块Z1-7,用于当中间件的第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,根据当前设备容器私有CSP句柄和国密算法密钥句柄,查找当前设备中的容器名为当前容器名的容器,读取容器中的国密证书数据,触发中间件第四判断模块Z3-4;
中间件第四判断模块Z3-4,用于判断是否读取到合法的国密证书数据,如果是,则触发中间件第八输出模块Z2-8;否则,触发中间件第九输出模块Z2-9;
中间件第八输出模块Z2-8,用于输出国密证书数据和成功标识,触发上层应用第四判断模块S’3-4;
中间件第九输出模块Z2-9,用于输出失败标识,触发上层应用第四判断模块S’3-4;
上层应用第四判断模块S’3-4,用于判断是否获取到国密证书数据,如果是,则触发上层应用第一获取模块S’5-1,否则,触发上层应用报错模块S’4-1;
上层应用第一获取模块S’5-1,用于根据国密证书数据获取国密证书认证信息,触发上层应用第五判断模块S’3-5;
上层应用第一获取模块S’5-1,包括上层应用第一获取单元和上层应用第二获取单元;
上层应用第一获取单元,用于上层应用调用主机操作系统的解析证书函数根据国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据国密证书上下文结构体获取国密证书认证信息。
本实施例中,解析证书函数可以是CertCreateCertificateContext函数,证书名转换格式函数可以是CertNameToStr函数。
本步骤中,获取到的国密证书认证信息可以是国密证书的DN信息。
例如,根据国密证书上下文结构体调用主机操作系统提供的CertNameToStr函数获取国密证书的DN信息,获取到DN信息中的CN属性信息为“CN=TEST1”,将CN属性信息作为国密证书认证信息的标识。
上层应用第五判断模块S’3-5,用于判断国密证书认证信息是否和认证信息相匹配,如果是,则触发上层应用第二获取模块S’5-2,否则,释放当前设备容器私有CSP句柄,触发上层应用第六发送模块S’2-6。
上层应用第五判断模块S’3-5,具体用于查找国密证书认证信息的标识中是否包含和认证信息的标识一致的标识信息,如果是,则匹配;否则,不匹配。
例如,若获取到的国密证书认证信息的标识为“CN=TEST1”,认证信息的标识为“CN=TEST1”,上层应用第五判断模块S’3-5查找到国密证书认证信息的标识中包含和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息相匹配,若获取到的国密证书认证信息的标识为“CN=TEST2”,上层应用第五判断模块S’3-5查找国密证书认证信息的标识中不含有和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息不匹配。
上层应用第二获取模块S’5-2,用于获取国密签名数据,触发上层应用第一返回模块S’6-1;
上层应用第一返回模块S’6-1,用于向服务器返回国密签名数据;
上层应用第六发送模块S’2-6,用于设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递中间件的第二函数,触发中间件第八获取模块Z1-8;
其中,设置第二枚举容器参数包括设置第二枚举容器类型参数和第二枚举容器标志位参数,设置第二枚举容器类型参数为PP_ENUMCONTAINERS,设置第二枚举容器标志位参数为CRYPT_NEXT。
中间件第八获取模块Z1-8,用于当中间件的第二函数获取到中间件私有CSP句柄和第二枚举容器参数时,获取当前容器名的下一个容器名,触发中间件第五判断模块Z3-5;
中间件第五判断模块Z3-5,用于判断当前容器名的下一个容器名是否存在,如果是,则将当前容器名的下一个容器名作为当前容器名,触发中间件第二输出模块Z2-2;否则,触发中间件第三输出模块Z2-3。
本实施例中,系统还包括:
上层应用第七发送模块S’2-7,用于当中间件第一输出模块Z2-1,输出中间件私有CSP句柄和成功标识之后,触发上层应用第二发送模块S’2-2之前,设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给中间件的第二函数,触发中间件第九获取模块Z1-9;
其中,设置第一枚举算法参数包括设置第一枚举算法类型参数和第一枚举算法标志位参数,具体地,设置第一枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第一枚举算法标志位参数为CRYPT_FIRST。
中间件第九获取模块Z1-9,用于当中间件的第二函数获取到中间件私有CSP句柄和第一枚举算法参数时,获取中间件的预设算法列表中的第一算法标识,触发中间件第六判断模块Z3-6;
中间件第九获取模块Z1-9,具体用于中间件的第二函数获取到枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,枚举算法标志位参数为CRYPT_FIRST时,第二函数获取预设算法列表中的第一个算法标识,复位计数器,触发中间件第六判断模块Z3-6;
中间件第六判断模块Z3-6,判断第一算法标识是否存在,如果是,则将第一算法标识作为当前算法标识,触发中间件第十输出模块Z2-10;否则,触发中间件第十一输出模块Z2-11;
中间件第十输出模块Z2-10,用于输出当前算法标识和成功标识,触发上层应用第六判断模块S’3-6;
中间件第十一输出模块Z2-11,用于输出失败标识,触发上层应用第六判断模块S’3-6;
上层应用第六判断模块S’3-6,用于判断是否获取到当前算法标识,如果是,则触发上层应用第八发送模块S’2-8;否则,触发上层应用报错模块S’4-1;
上层应用第八发送模块S’2-8,用于设置当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数类型传递给中间件的第二函数,触发中间件第十获取模块Z1-10;
其中,设置第二枚举算法参数包括设置第二枚举算法类型参数和第二枚举算法标志位参数,具体地,设置第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX,设置第二枚举算法标志位参数为CRYPT_NEXT。
中间件第十获取模块Z1-10,当中间件的第二函数获取到中间件私有CSP句柄和第二枚举算法参数时,获取中间件的预设算法列表中的当前算法标识的下一个算法标识,触发中间件第七判断模块Z3-7;
中间件第十获取模块Z1-10,具体用于当第二函数获取到第二枚举算法类型参数为PP_ENUMALGS或PP_ENUMALGS_EX、第二枚举算法标志位参数为CRYPT_NEXT时,第二函数将计数器加1,获取预设算法列表中和当前计数器数值所对应的算法标识;
中间件第七判断模块Z3-7,判断当前算法标识的下一个算法标识是否存在,如果是,则将当前算法标识的下一个算法标识作为当前算法标识,触发中间件第十二输出模块Z2-12;否则,触发中间件第十三输出模块Z2-13;
中间件第十二输出模块Z2-12,用于输出当前算法标识和成功标识,触发上层应用第七判断模块S’3-7;
中间件第十三输出模块Z2-13,用于输出失败标识,触发上层应用第七判断模块S’3-7;
上层应用第七判断模块S’3-7,用于判断是否获取到当前算法标识,如果是,则触发上层应用第八发送模块S’2-8;否则,触发上层应用第八判断模块S’3-8;
上层应用第八判断模块S’3-8,用于根据获取到的全部算法标识判断中间件是否支持国密算法,如果是,则触发上层应用第二发送模块S’2-2;否则,触发上层应用报错模块S’4-1。
上层应用第八判断模块S’3-8,具体用于查找获取到的全部算法标识中是否存在预设国密签名算法标识,如果是,则判断中间件支持国密算法,则触发上层应用第二发送模块S’2-2;否则,判断中间件不支持国密算法,则触发上层应用报错模块S’4-1。
实施例7
本实施例提供了一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备;
中间件的注册证书模块,用于当检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程。
其中,设备信息中包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息;
证书列表包括智能密钥设备中的证书信息,其中证书信息可以是证书的版本信息、证书的序列号信息、证书所使用的签名算法信息、证书的发行机构名称信息、证书的有效期信息、证书所有人的名称信息、证书所有人的公钥信息和证书发行者对证书的签名信息等。
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;当服务器选择的证书类型为非国密证书类型时,触发服务器第二发送模块;
服务器第二获取模块,用于根据用户信息获取私有CSP名和认证信息和国密密钥容器名,触发服务器第一发送模块;
服务器第一发送模块,用于将预设国密证书类型标识、私有CSP名、认证信息、国密密钥容器名和待签数据作为国密证书类型信息发送给上层应用,等待获取上层应用返回的国密签名数据;
服务器第二发送模块,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给上层应用,等待获取上层应用返回的非国密签名数据;
其中,证书类型包括国密证书类型和非国密证书类型;证书类型信息包括国密证书类型信息和非国密证书类型信息;签名数据包括国密签名数据和非国密签名数据,其中,非国密证书类型可以是RSA证书类型。
本实施例中,认证信息可以是与用户信息绑定的国密证书DN(DistinguishedName,甄别名)信息。
例如,服务器获取与用户信息绑定的国密证书的DN信息,获取到DN信息中的CN(Common name,常用名)属性信息为“CN=TEST1”,将“CN=TEST1”作为认证信息的标识。
其中,私有CSP名是指智能密钥设备提供商的信息,例如“EnterSafe ET199AutoCSP V1.0”。
本实施例中,上层应用可以是签名程序。
上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一获取模块;
上层应用第二接收模块,用于接收非国密证书类型信息,触发上层应用第六获取模块;
上层应用第六获取模块,用于根据注册到浏览器的证书存储区中的非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块;
上层应用第一获取模块,用于调用主机操作系统的第一接口函数根据私有CSP名,将国密密钥容器名作为当前容器参数传递给中间件的第一函数,获取当前设备容器私有CSP句柄,触发上层应用第一判断模块;
本实施例中,第一接口函数的可以是CryptAcquireContext函数,第一函数可以是CPAcquireContext函数。
上层应用第一判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第二获取模块;否则,触发上层应用报错模块;
上层应用报错模块,用于报错退出;
上层应用第二获取模块,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给中间件的第三函数获取当前设备中的容器名为国密密钥容器名的容器中的国密算法密钥句柄,触发上层应用第二判断模块;
本实施例中,第三接口函数可以是CryptGetUserKey函数,第三函数可以是CPGetUserKey函数。
上层应用第二判断模块,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第三获取模块;否则,触发上层应用报错模块;
上层应用第三获取模块,用于调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给中间件的第四函数获取当前设备中的容器名为国密密钥容器名的的容器中的国密证书数据,触发上层应用第三判断模块;
本实施例中,第四接口函数可以是CryptGetKeyParam函数,第四函数可以是CPGetKeyParam函数。
上层应用第三判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第四获取模块;否则,触发上层应用报错模块;
上层应用第四获取模块,用于根据国密证书数据获取国密证书认证信息,触发上层应用第四判断模块;
上层应用第四获取模块,包括:
上层应用第一获取单元,用于上层应用调用主机操作系统的解析证书函数根据国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据国密证书上下文结构体获取国密证书认证信息。
本实施例中,解析证书函数可以是CertCreateCertificateContext函数,证书名转换格式函数可以是CertNameToStr函数。
获取到的国密证书认证信息可以是国密证书的DN信息。
例如,根据国密证书上下文结构体调用主机操作系统提供的CertNameToStr函数获取国密证书的DN信息,获取到DN信息中的CN属性信息为“CN=TEST1”,将CN属性信息作为国密证书认证信息的标识。
上层应用第四判断模块,用于判断国密证书认证信息是否和认证信息相匹配,如果是,则触发上层应用第五获取模块;否则,触发上层应用报错模块;
上层应用第四判断模块,具体用于查找国密证书认证信息的标识中是否包含和认证信息的标识一致的标识信息,如果是,则匹配;否则,不匹配。
例如,若获取到的国密证书认证信息的标识为“CN=TEST1”,认证信息的标识为“CN=TEST1”,上层应用第四判断模块,查找到国密证书认证信息的标识中包含和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息相匹配,若获取到的国密证书认证信息的标识为“CN=TEST2”,上层应用第四判断模块,查找国密证书认证信息的标识中不含有和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息不匹配。
上层应用第五获取模块,用于获取国密签名数据,触发上层应用第一返回模块;
上层应用第五获取模块,包括:
上层应用第三获取单元,用于调用主机操作系统的第五接口函数,将当前设备容器私有CSP句柄、国密算法密钥句柄和预设摘要算法标识传递给中间件的第五函数,获取哈希句柄,触发上层应用第四获取单元;
本实施例中,第五接口函数可以是CryptCreateHash函数,第五函数可以是CPCreateHash函数。
上层应用第四获取单元,用于调用主机操作系统的第六接口函数,将当前设备容器私有CSP句柄、哈希句柄和待签数据传递给中间件的第六函数,获取摘要值,触发上层应用第五获取单元;
本实施例中,第六接口函数可以是CryptHashData函数,第六函数可以是CPHashData函数。
上层应用第五获取单元,用于调用主机操作系统的第七接口函数,将当前设备容器私有CSP句柄、哈希句柄和预设国密签名算法标识传递给中间件的第七函数,获取国密签名数据,触发上层应用第一返回模块。
本实施中,第七接口函数可以是CryptSignHash函数,第七函数可以是CPSignHash函数。
上层应用第一返回模块,用于向服务器返回国密签名数据。
实施例8
本实施例提供了一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备;
中间件的注册证书模块,用于当检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程。
其中,设备信息中包括智能密钥设备的设备名和设备ID(ID,身份识别标识)等信息;
证书列表包括智能密钥设备中的证书信息,其中证书信息可以是证书的版本信息、证书的序列号信息、证书所使用的签名算法信息、证书的发行机构名称信息、证书的有效期信息、证书所有人的名称信息、证书所有人的公钥信息和证书发行者对证书的签名信息等。
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;当服务器选择的证书类型为非国密证书类型时,触发服务器第二发送模块;
服务器第二获取模块,用于根据用户信息获取私有CSP名和认证信息和国密密钥容器名,触发服务器第一发送模块;
服务器第一发送模块,用于将预设国密证书类型标识、私有CSP名、认证信息、国密密钥容器名和待签数据作为国密证书类型信息发送给上层应用,等待获取上层应用返回的国密签名数据;
服务器第二发送模块,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给上层应用,等待获取上层应用返回的非国密签名数据;
其中,证书类型包括国密证书类型和非国密证书类型;证书类型信息包括国密证书类型信息和非国密证书类型信息;签名数据包括国密签名数据和非国密签名数据,其中,非国密证书类型可以是RSA证书类型。
本实施例中,认证信息可以是与用户信息绑定的国密证书DN(DistinguishedName,甄别名)信息。
例如,服务器获取与用户信息绑定的国密证书的DN信息,获取到DN信息中的CN(Common name,常用名)属性信息为“CN=TEST1”,将“CN=TEST1”作为认证信息的标识。
其中,私有CSP名是指智能密钥设备提供商的信息,例如“EnterSafe ET199AutoCSP V1.0”。
本实施例中,上层应用可以是签名程序。
上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一发送模块;
上层应用第二接收模块,用于接收非国密证书类型信息,触发上层应用第三获取模块;
上层应用第三获取模块,用于根据注册到浏览器的证书存储区中的非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块;
上层应用第一发送模块,用于调用主机操作系统的第一接口函数根据私有CSP名,将国密密钥容器名作为当前容器参数传递给中间件的第一函数触发中间件第一获取模块;
本实施例中,第一接口函数的可以是CryptAcquireContext函数,第一函数可以是CPAcquireContext函数。
中间件第一获取模块,用于当中间件的第一函数获取到国密密钥容器名时,根据国密密钥容器名获取设备名和设备容器名,根据设备名和设备容器名定位当前设备,触发中间件第一判断模块;
中间件第一判断模块,用于判断是否定位到当前设备,如果是,则触发中间件第二获取模块;否则,触发中间件第二输出模块;
中间件第二获取模块,用于根据当前设备设置当前设备容器私有CSP句柄,触发中间件第一输出模块;
中间件第一输出模块,用于输出当前设备容器私有CSP句柄和成功标识,触发上层应用第一判断模块;
中间件第二输出模块,用于输出失败标识,触发上层应用第一判断模块;
本实施例中,成功标识可以是TRUE,失败标识可以是FALSE。
上层应用第一判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第二发送模块;否则,触发上层应用报错模块;
上层应用报错模块,用于报错退出;
上层应用第二发送模块,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给中间件的第三函数,触发中间件第三获取模块;
本实施例中,第三接口函数可以是CryptGetUserKey函数,第三函数可以是CPGetUserKey函数。
中间件第三获取模块,用于当中间件的第三函数获取到当前设备容器私有CSP句柄和预设国密签名算法标识时,根据当前设备容器私有CSP句柄和预设国密签名算法标识查找当前设备中的容器名为国密密钥容器名的容器获取国密签名算法密钥,触发中间件第二判断模块;
中间件第二判断模块,用于判断是否获取到国密签名算法密钥,如果是,则触发中间件第四获取模块;否则,触发中间件第四输出模块;
中间件第四获取模块,用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发中间件第三输出模块;
中间件第三输出模块,用于输出国密算法密钥句柄和成功标识,触发上层应用第二判断模块;
中间件第四输出模块,用于输出失败标识,触发上层应用第二判断模块;
上层应用第二判断模块,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第三发送模块;否则,触发上层应用报错模块;
上层应用第三发送模块,用于调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给中间件的第四函数,触发中间件第五获取模块;
本实施例中,第四接口函数可以是CryptGetKeyParam函数,第四函数可以是CPGetKeyParam函数。
中间件第五获取模块,用于当中间件的第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,查找到当前设备中的容器名为国密密钥容器名的容器,读取容器中的国密证书数据,触发中间件第三判断模块;
中间件第三判断模块,用于判断是否读取到合法的国密证书数据,如果是,则触发中间件第四输出模块;否则,触发中间件第五输出模块;
中间件第四输出模块,用于输出国密证书数据和成功标识,触发上层应用第三判断模块;
中间件第五输出模块,用于输出失败标识,触发上层应用第三判断模块;
上层应用第三判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第一获取模块;否则,触发上层应用报错模块;
上层应用第一获取模块,用于根据国密证书数据获取国密证书认证信息,触发上层应用第四判断模块;
上层应用第一获取模块,包括:
上层应用第一获取单元,用于上层应用调用主机操作系统的解析证书函数根据国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据国密证书上下文结构体获取国密证书认证信息。
本实施例中,解析证书函数可以是CertCreateCertificateContext函数,证书名转换格式函数可以是CertNameToStr函数。
获取到的国密证书认证信息可以是国密证书的DN信息。
例如,上层应用第一获取模块根据国密证书上下文结构体调用主机操作系统提供的CertNameToStr函数获取国密证书的DN信息,获取到DN信息中的CN属性信息为“CN=TEST1”,将CN属性信息作为国密证书认证信息的标识。
上层应用第四判断模块,用于判断国密证书认证信息是否和认证信息相匹配,如果是,则触发上层应用第二获取模块;否则,触发上层应用报错模块;
查找国密证书认证信息的标识中是否包含和认证信息的标识一致的标识信息,如果是,则匹配;否则,不匹配。
例如,若获取到的国密证书认证信息的标识为“CN=TEST1”,认证信息的标识为“CN=TEST1”,上层应用第四判断模块查找到国密证书认证信息的标识中包含和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息相匹配,若获取到的国密证书认证信息的标识为“CN=TEST2”,上层应用第四判断模块查找国密证书认证信息的标识中不含有和认证信息的标识一致的标识信息,则判断国密证书认证信息和认证信息不匹配。
上层应用第二获取模块,用于获取国密签名数据,触发上层应用第一返回模块;
上层应用第二获取模块包括:
上层应用第三获取单元,用于调用主机操作系统的第五接口函数,将当前设备容器私有CSP句柄、国密算法密钥句柄和预设摘要算法标识传递给中间件的第五函数,获取哈希句柄,触发上层应用第四获取单元;
本实施例中,第五接口函数可以是CryptCreateHash函数,第五函数可以是CPCreateHash函数。
上层应用第四获取单元,用于调用主机操作系统的第六接口函数,将当前设备容器私有CSP句柄、哈希句柄和待签数据传递给中间件的第六函数,获取摘要值,触发上层应用第五获取单元;
本实施例中,第六接口函数可以是CryptHashData函数,第六函数可以是CPHashData函数。
上层应用第五获取单元,用于调用主机操作系统的第七接口函数,将当前设备容器私有CSP句柄、哈希句柄和预设国密签名算法标识传递给中间件的第七函数,获取国密签名数据,触发上层应用第一返回模块。
本实施中,第七接口函数可以是CryptSignHash函数,第七函数可以是CPSignHash函数。
上层应用第一返回模块,用于向服务器返回国密签名数据。

Claims (52)

1.一种定位国密证书的方法,其特征在于,所述方法包括:
步骤A1:中间件的函数等待被调用,当第一函数获取到当前容器参数时,第一函数被调用,若第一函数被调用,则执行步骤A2;当第二函数获取到中间件私有CSP句柄和当前枚举参数时,第二函数被调用,若第二函数被调用,则执行步骤A4;当第三函数获取到当前设备容器私有CSP句柄和国密算法标识时,第三函数被调用,若第三函数被调用,则执行步骤A6;当第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,第四函数被调用,若第四函数被调用,则执行步骤A8;
步骤A2:根据所述当前容器参数判断获取到的当前容器名是否为空,如果是,则获取中间件私有CSP句柄,输出中间件私有CSP句柄并返回成功标识;否则,执行步骤A3;
步骤A3:根据当前容器名获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,判断是否定位到当前设备,如果是,则根据所述当前设备设置当前设备容器私有CSP句柄,输出所述当前设备容器私有CSP句柄,返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤A4:判断获取到的当前枚举参数的类型,若所述当前枚举参数的类型是枚举容器参数类型,则执行步骤A5;
步骤A5:获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的当前容器名,判断所述当前容器名是否存在,如果是,则输出所述当前容器名并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤A6:判断获取到的当前设备容器私有CSP句柄和国密算法标识是否合法,如果是,则执行步骤A7;否则,返回失败标识,返回步骤A1;
步骤A7:根据所述当前设备容器私有CSP句柄和所述国密算法标识,查找当前设备的容器名为所述当前容器名的容器中是否存在国密用法密钥,如果是查找到,则将预设国密用法密钥句柄作为国密算法密钥句柄,输出所述国密算法密钥句柄并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤A8:判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄是否合法,如果是,则执行步骤A9;否则,返回失败标识,返回步骤A1;
步骤A9:根据所述当前设备容器私有CSP句柄和所述国密算法密钥句柄查找到当前设备中的容器名为所述当前容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出所述国密证书数据,并且返回成功标识,返回步骤A1;否则返回失败标识,返回步骤A1。
2.根据权利要求1所述的方法,其特征在于,所述步骤A3具体包括:
步骤B1:根据所述当前容器名获取所述设备名和所述设备容器名,判断所述设备名是否不为空,如果是,则执行步骤B6;否则执行步骤B2;
步骤B2:根据所述设备容器名获取和所述设备容器名相匹配的智能密钥设备,判断是否存在和所述设备容器名相匹配的智能密钥设备,如果是,则执行步骤B3;否则,返回失败标识,返回步骤A1;
步骤B3:判断是否查找到唯一和所述设备容器名相匹配的智能密钥设备,如果是,则将唯一和所述设备容器名相匹配的智能密钥设备作为所述当前设备,保存当前设备ID,执行步骤B4;否则,执行步骤B5;
步骤B4:设置所述当前设备容器私有CSP句柄,输出所述当前设备容器私有CSP句柄,返回成功标识,返回步骤A1;
步骤B5:判断是否需要输出提示选择智能密钥设备信息,如果需要输出提示选择智能密钥设备信息,则输出提示选择智能密钥设备信息,当获取到外部选择的智能密钥设备时,将所述外部选择的智能密钥设备作为所述当前设备,保存当前设备ID,返回步骤B4;如果不需要输出提示选择智能密钥设备信息,则将查找到的第一个和所述设备容器名相匹配的智能密钥设备作为所述当前设备,保存当前设备ID,返回步骤B4;
步骤B6:根据所述设备名获取和所述设备名相匹配的智能密钥设备,查找和所述设备名相匹配的智能密钥设备中是否存在和所述设备容器名相匹配的容器,如果是,则将和所述设备名相匹配的智能密钥设备作为所述当前设备,保存当前设备ID,执行步骤B4;否则,返回失败标识,返回步骤A1。
3.根据权利要求1所述的方法,其特征在于,所述步骤A4中所述当前枚举参数的类型,还包括:枚举算法参数类型;
如果所述当前枚举参数的类型是所述枚举算法参数类型,则执行步骤C1,
步骤C1:获取所述中间件的预设算法列表中的当前算法标识,判断当前算法标识是否存在,如果是,则输出当前算法标识,并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1。
4.根据权利要求3所述的方法,其特征在于,所述步骤A4中所述枚举算法参数类型包括第一枚举算法参数和第二枚举算法参数;
当所述枚举算法参数类型是所述第一枚举算法参数时,执行步骤D1,当所述枚举算法参数类型是所述第二枚举算法参数时,执行步骤D2;
步骤D1:获取所述中间件的预设算法列表中的第一算法标识,判断所述第一算法标识是否存在,如果是,则将所述第一算法标识作为当前算法标识,输出所述当前算法标识,并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤D2:获取所述中间件的预设算法列表中的当前算法标识的下一个算法标识,判断所述当前算法标识的下一个算法标识是否存在,如果是,则将所述当前算法标识的下一个算法标识作为当前算法标识,输出所述当前算法标识,并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1。
5.根据权利要求1所述的方法,其特征在于,所述步骤A4中所述枚举容器参数类型包括第一枚举容器参数和第二枚举容器参数;
当所述枚举容器参数类型是所述第一枚举容器参数时,执行步骤E1,当所述枚举容器参数类型是所述第二枚举容器参数时,执行步骤E2;
步骤E1:获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的第一容器名,判断所述第一容器名是否存在,如果是,则将所述第一容器名作为当前容器名,则输出所述当前容器名并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤E2:获取所述容器名列表中的当前容器名的下一个容器名,判断所述当前容器名的下一个容器名是否存在,如果是,则将所述当前容器名的下一个容器名作为当前容器名,则输出所述当前容器名并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1。
6.根据权利要求1所述的方法,其特征在于,所述步骤A7中的所述国密算法标识包括:国密签名算法标识;
所述步骤A7具体包括:
根据所述当前设备容器私有CSP句柄和所述国密签名算法标识,查找当前设备中的容器名为所述当前容器名的容器中是否存在国密签名算法密钥,如果查找到,则将预设国密签名算法密钥句柄作为国密算法密钥句柄,输出所述国密算法密钥句柄并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1。
7.根据权利要求6所述的方法,其特征在于,所述步骤A1还包括:当第五函数获取到当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识时,第五函数被调用,若第五函数被调用,执行步骤G1;当第六函数获取到当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识时,第六函数被调用,若第六函数被调用,执行步骤G2;当第七函数获取到当前设备容器私有CSP句柄、哈希句柄和国密签名算法标识时,第七函数被调用,若第七函数被调用,执行步骤G3;
所述步骤G1:判断获取到的当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识是否合法,如果是,则初始化一个哈希对象实例,将哈希对象实例的地址作为哈希句柄,输出所述哈希句柄并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤G2:判断获取到的当前设备容器私有CSP句柄、哈希句柄和待签数据是否合法,如果是,则用所述哈希句柄对所述待签数据做摘要,获取摘要值并保存所述待签数据,返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1;
步骤G3:判断获取到的当前设备容器私有CSP句柄、哈希句柄和国密签名算法标识是否合法,如果是,则获取国密签名数据,输出国密签名数据,并返回成功标识,返回步骤A1;否则,返回失败标识,返回步骤A1。
8.根据权利要求6所述的方法,其特征在于,所述国密算法标识还包括:国密交换算法标识。
9.一种定位国密证书的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统中,当所述中间件检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息、证书列表,所述中间件遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则所述中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,所述方法包括:
步骤M1:所述服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,根据所述用户信息获取私有CSP名和认证信息,将预设国密证书类型标识、所述私有CSP名、所述认证信息和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
步骤M2:当所述上层应用获取到国密证书类型信息时,所述上层应用调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给所述中间件的第一函数,获取中间件私有CSP句柄;
步骤M3:所述上层应用设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和所述当前枚举参数传递给中间件的第二函数获取容器名列表中的第一容器名,所述上层应用判断是否获取到第一容器名,如果是,则将所述第一容器名作为当前容器名,执行步骤M4;否则报错退出;
步骤M4:所述上层应用调用主机操作系统的第一接口函数根据所述中间件私有CSP句柄,将所述当前容器名作为当前容器参数传递给所述中间件的所述第一函数,获取当前设备容器私有CSP句柄,所述上层应用判断是否获取到当前设备容器私有CSP句柄,如果是,则执行步骤M5;否则,报错退出;
步骤M5:所述上层应用调用主机操作系统的第三接口函数将所述当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数获取当前设备的容器名为所述当前容器名的容器中的国密算法密钥句柄,所述上层应用判断是否获取到国密算法密钥句柄,如果是,则执行步骤M6;否则,执行步骤M9;
步骤M6:所述上层应用调用主机操作系统的第四接口函数将所述当前设备容器私有CSP句柄和所述国密算法密钥句柄传递给所述中间件的第四函数获取当前设备的容器名为所述当前容器名的容器中的国密证书数据,所述上层应用判断是否获取到国密证书数据,如果是,则执行步骤M7;否则,报错退出;
步骤M7:所述上层应用根据所述国密证书数据获取国密证书认证信息;
步骤M8:所述上层应用判断所述国密证书认证信息是否和所述认证信息相匹配,如果是,则获取国密签名数据,向服务器返回国密签名数据;否则,释放所述当前设备容器私有CSP句柄,执行步骤M9;
步骤M9:所述上层应用设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和所述当前枚举参数传递给中间件的第二函数,获取所述容器名列表中的当前容器名的下一个容器名,所述上层应用判断是否获取到当前容器名的下一个容器名,如果是,则将所述当前容器名的下一个容器名作为当前容器名,返回步骤M4;否则,报错退出。
10.根据权利要求9所述的方法,其特征在于,所述步骤M1中,所述证书类型,还包括:非国密证书类型,
所述步骤M1所述服务器根据预设选择证书条件选择证书类型之后,还包括:
当所述服务器选择的证书类型为非国密证书类型时,将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述步骤M2还包括,当所述上层应用获取到所述非国密证书类型信息时,所述上层应用根据注册到浏览器的证书存储区中的所述非国密证书类型证书获取非国密签名数据,向所述服务器返回所述非国密签名数据。
11.根据权利要求9所述的方法,其特征在于,所述步骤M7具体包括:
步骤N1:所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体;
步骤N2:所述上层应用调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
12.根据权利要求9所述的方法,其特征在于,所述步骤M2之后,所述步骤M3之前还包括:
步骤P1:所述上层应用设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数,获取所述中间件的预设算法列表中的第一算法标识,所述上层应用判断是否获取到第一算法标识,如果是,则将所述第一算法标识作为当前算法标识,执行步骤P2;否则,报错退出;
步骤P2:所述上层应用设置所述当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和所述当前枚举参数传递给所述中间件的第二函数获取所述中间件的所述预设算法列表中的当前算法标识的下一算法标识,所述上层应用判断是否获取到当前算法标识的下一算法标识,如果是,则将所述当前算法标识的下一算法标识作为当前算法标识,返回步骤P2;否则,执行步骤P3;
步骤P3:所述上层应用根据获取到的全部算法标识判断所述中间件是否支持国密算法,如果是,则执行步骤M3;否则,报错退出。
13.根据权利要求12所述的方法,其特征在于,所述步骤P3中,所述上层应用根据获取到的全部算法标识判断所述中间件是否支持国密算法,具体包括:
所述上层应用查找获取到的全部算法标识中是否存在国密签名算法标识,如果是,则判断所述中间件支持国密算法;否则,判断所述中间件不支持国密算法。
14.根据权利要求9所述的方法,其特征在于,所述获取国密签名数据,向服务器返回国密签名数据,具体包括:
步骤Q1:所述上层应用调用主机操作系统的第五接口函数,将所述当前设备容器私有CSP句柄、所述国密算法密钥句柄和预设摘要算法标识传递给所述中间件的第五函数,获取哈希句柄;
步骤Q2:所述上层应用调用主机操作系统的第六接口函数,将所述当前设备容器私有CSP句柄、所述哈希句柄和所述待签数据传递给所述中间件的第六函数,获取摘要值;
步骤Q3:所述上层应用调用主机操作系统的第七接口函数,将所述当前设备容器私有CSP句柄、所述哈希句柄和预设国密签名算法标识传递给所述中间件的第七函数,获取国密签名数据,将所述国密签名数据返回给服务器。
15.一种定位国密证书的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统中,当所述中间件检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,所述中间件遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则所述中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,所述方法包括:
步骤R1:所述服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,根据所述用户信息获取私有CSP名和认证信息,将预设国密证书类型标识和所述私有CSP名和所述认证信息和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
步骤R2:当所述上层应用获取到国密证书类型信息时,所述上层应用调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给所述中间件的第一函数;
步骤R3:当所述中间件的所述第一函数获取到的当前容器参数为预设容器名时,根据预设容器名设置中间件私有CSP句柄,输出中间件私有CSP句柄和成功标识;
步骤R4:所述上层应用设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数;
步骤R5:当所述中间件的所述第二函数获取到中间件私有CSP句柄和第一枚举容器参数时,获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的第一容器名,判断所述第一容器名是否存在,如果是,则将所述第一容器名作为当前容器名,输出所述当前容器名并返回成功标识;否则,返回失败标识;
步骤R6:所述上层应用判断是否获取到当前容器名,如果是,则执行步骤R7;否则报错退出;
步骤R7:所述上层应用调用主机操作系统的所述第一接口函数根据中间件私有CSP句柄,将当前容器名作为当前容器参数传递给中间件的第一函数;
步骤R8:当所述中间件的所述第一函数获取到当前容器名时,解析所述当前容器名,获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,判断是否定位到当前设备,如果是,则根据所述当前设备设置当前设备容器私有CSP句柄,输出所述当前设备容器私有CSP句柄和成功标识;否则,输出失败标识;
步骤R9:所述上层应用判断是否获取到当前设备容器私有CSP句柄,如果是,则执行步骤R10;否则,报错退出;
步骤R10:所述上层应用调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数;
步骤R11:当所述中间件的所述第三函数获取到当前设备容器私有CSP句柄和预设国密签名算法标识时,查找所述当前设备中的容器名为所述当前容器名的容器中是否存在国密签名算法密钥,如果查找到,则将预设国密签名算法密钥句柄作为国密算法密钥句柄,输出所述国密算法密钥句柄和成功标识;否则,输出失败标识;
步骤R12:所述上层应用判断是否获取到国密算法密钥句柄,如果是,则执行步骤R13;否则,执行步骤R18;
步骤R13:所述上层应用调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给所述中间件的第四函数;
步骤R14:当所述中间件的第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,查找到所述当前设备中的容器名为所述当前容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出所述国密证书数据和成功标识;否则输出失败标识;
步骤R15:所述上层应用判断是否获取到国密证书数据,如果是,则执行步骤R16;否则,报错退出;
步骤R16:所述上层应用根据国密证书数据获取国密证书认证信息;
步骤R17:所述上层应用判断国密证书认证信息是否和认证信息相匹配,如果是,则获取国密签名数据,向服务器返回所述国密签名数据;否则,释放所述当前设备容器私有CSP句柄,执行步骤R18;
步骤R18:所述上层应用设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和所述当前枚举参数传递所述中间件的所述第二函数;
步骤R19:当所述中间件的所述第二函数获取到中间件私有CSP句柄和第二枚举容器参数时,获取当前容器名的下一个容器名,判断所述当前容器名的下一个容器名是否存在,如果是,则将当前容器名的下一个容器名作为当前容器名,输出所述当前容器名和成功标识,返回步骤R6;否则,输出失败标识,返回步骤R6。
16.根据权利要求15所述的方法,其特征在于,所述步骤R1中所述证书类型,还包括:非国密证书类型,
所述步骤R1中所述服务器根据预设选择证书条件选择证书类型之后,还包括:
当所述服务器选择的所述证书类型为所述非国密证书类型时,将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述步骤R2还包括,当所述上层应用获取到所述非国密证书类型信息时,所述上层应用根据注册到所述浏览器的证书存储区中的非国密证书类型证书获取非国密签名数据,向所述服务器返回所述非国密签名数据。
17.根据权利要求15所述的方法,其特征在于,所述步骤R16具体包括:
步骤S1:所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体;
步骤S2:所述上层应用调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
18.根据权利要求15所述的方法,其特征在于,所述步骤R3之后,所述步骤R4之前,还包括:
步骤T1:所述上层应用设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数;
步骤T2:当所述中间件的所述第二函数获取到中间件私有CSP句柄和第一枚举算法参数时,获取所述中间件的预设算法列表中的第一算法标识,判断所述第一算法标识是否存在,如果是,则将所述第一算法标识作为当前算法标识,输出所述当前算法标识和成功标识;否则,输出失败标识;
步骤T3:所述上层应用判断是否获取到当前算法标识,如果是,则执行步骤T4;否则,报错退出;
步骤T4:所述上层应用设置所述当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数类型传递给所述中间件的第二函数;
步骤T5:当所述中间件的所述第二函数获取到中间件私有CSP句柄和第二枚举算法参数时,获取所述中间件的预设算法列表中的当前算法标识的下一个算法标识,判断所述当前算法标识的下一个算法标识是否存在,如果是,则将所述当前算法标识的下一个算法标识作为当前算法标识,输出所述当前算法标识和成功标识;否则,输出失败标识;
步骤T6:所述上层应用判断是否获取到当前算法标识,如果是,则返回步骤T4;否则,执行步骤T7;
步骤T7:所述上层应用根据获取到的全部算法标识判断所述中间件是否支持国密算法,如果是,则执行步骤R4;否则,报错退出。
19.根据权利要求18所述的方法,其特征在于,所述步骤T7中,所述上层应用根据获取到的全部算法标识判断所述中间件是否支持国密算法,具体包括:
所述上层应用查找获取到的全部算法标识中是否存在预设国密签名算法标识,如果是,则判断所述中间件支持国密算法;否则,判断所述中间件不支持国密算法。
20.一种定位国密证书的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统中,当所述中间件检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,所述中间件遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则所述中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,所述方法包括:
步骤U1:所述服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,根据所述用户信息获取私有CSP名和认证信息和国密密钥容器名,将预设国密证书类型标识和所述私有CSP名和所述认证信息和国密密钥容器名和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
步骤U2:所述上层应用调用主机操作系统的第一接口函数根据私有CSP名,将国密密钥容器名作为当前容器参数传递给所述中间件的第一函数,获取当前设备容器私有CSP句柄,所述上层应用判断是否获取到当前设备容器私有CSP句柄,如果是,则执行步骤U3;否则,报错退出;
步骤U3:所述上层应用调用主机操作系统的第三接口函数将所述当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数获取当前设备中的容器名为所述国密密钥容器名的容器中的国密算法密钥句柄,所述上层应用判断是否获取到国密算法密钥句柄,如果是,则执行步骤U4;否则,报错退出;
步骤U4:所述上层应用调用主机操作系统的第四接口函数将所述当前设备容器私有CSP句柄和所述国密算法密钥句柄传递给所述中间件的第四函数获取当前设备中的容器名为所述国密密钥容器名的容器中的国密证书数据,所述上层应用判断是否获取到国密证书数据,如果是,则执行步骤U5;否则,报错退出;
步骤U5:上层应用根据所述国密证书数据获取国密证书认证信息;
步骤U6:上层应用判断所述国密证书认证信息是否和所述认证信息相匹配,如果是,则获取国密签名数据,向服务器返回国密签名数据;否则,报错退出。
21.根据权利要求20所述的方法,其特征在于,所述步骤U1中,所述证书类型,还包括:非国密证书类型,
所述步骤U1中所述服务器根据预设选择证书条件选择证书类型之后,还包括:
当所述服务器选择的所述证书类型为所述非国密证书类型时,将预设非国密证书类型标识和所述待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述步骤U2还包括,当所述上层应用获取到所述非国密证书类型信息时,所述上层应用根据注册到所述浏览器的证书存储区的所述非国密证书类型证书获取非国密签名数据,向所述服务器返回所述非国密签名数据。
22.根据权利要求20所述的方法,其特征在于,所述步骤U5具体包括:
步骤V1:所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体;
步骤V2:所述上层应用调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
23.根据权利要求20所述的方法,其特征在于,所述步骤U6中所述获取国密签名数据,向服务器返回国密签名数据,具体包括:
步骤U6-1:所述上层应用调用主机操作系统的第五接口函数,将所述当前设备容器私有CSP句柄、所述国密算法密钥句柄和预设摘要算法标识传递给所述中间件的第五函数,获取哈希句柄;
步骤U6-2:所述上层应用调用主机操作系统的第六接口函数,将所述当前设备容器私有CSP句柄和所述哈希句柄和所述待签数据传递给所述中间件的第六函数,获取摘要值;
步骤U6-3:所述上层应用调用主机操作系统的第七接口函数,将所述当前设备容器私有CSP句柄和所述哈希句柄和预设国密签名算法标识传递给所述中间件的第七函数,获取国密签名数据,将所述国密签名数据返回给服务器。
24.一种定位国密证书的方法,适用于包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备的系统中,当所述中间件检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,所述中间件遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则所述中间件将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,所述方法包括:
步骤W1:所述服务器获取用户通过单向SSL登录输入的用户信息,判断用户信息是否合法,若获取到合法的用户信息,则当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,根据所述用户信息获取私有CSP名和认证信息和国密密钥容器名,将预设国密证书类型标识和所述私有CSP名、所述认证信息、所述国密密钥容器名和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
步骤W2:所述上层应用调用主机操作系统的第一接口函数根据私有CSP名,将国密密钥容器名作为当前容器参数传递给中间件的第一函数;
步骤W3:当所述中间件的所述第一函数获取到国密密钥容器名时,根据所述国密密钥容器名获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,判断是否定位到当前设备,如果是,则根据所述当前设备设置当前设备容器私有CSP句柄,输出所述当前设备容器私有CSP句柄和成功标识;否则,输出失败标识;
步骤W4:所述上层应用判断是否获取到当前设备容器私有CSP句柄,如果是,则执行步骤W5;否则报错退出;
步骤W5:所述上层应用调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数;
步骤W6:当所述中间件的所述第三函数获取到当前设备容器私有CSP句柄和预设国密签名算法标识时,根据当前设备容器私有CSP句柄和预设国密签名算法标识,查找当前设备中的容器名为国密密钥容器名的容器中是否存在国密签名算法密钥,如果查找到,则将预设国密签名算法密钥句柄作为国密算法密钥句柄,输出所述国密算法密钥句柄和成功标识;否则,输出失败标识;
步骤W7:所述上层应用判断是否获取到国密算法密钥句柄,如果是,则执行步骤W8;否则报错退出;
步骤W8:所述上层应用调用主机操作系统的第四接口函数将所述当前设备容器私有CSP句柄和所述国密算法密钥句柄传递给所述中间件的第四函数;
步骤W9:当所述中间件的所述第四函数获取到当前设备容器私有CSP句柄,国密算法密钥句柄时,查找到当前设备中的容器名为国密密钥容器名的容器,读取容器中的国密证书数据,判断是否读取到合法的国密证书数据,如果是,则输出国密证书数据和成功标识;否则输出失败标识;
步骤W10:所述上层应用判断是否获取到国密证书数据,如果是,则执行步骤W11;否则,报错退出;
步骤W11:所述上层应用根据所述国密证书数据获取国密证书认证信息;
步骤W12:所述上层应用判断所述国密证书认证信息是否和所述认证信息相匹配,如果是,则获取国密签名数据,向服务器返回所述国密签名数据;否则,报错退出。
25.根据权利要求24所述的方法,其特征在于,所述步骤W1中所述证书类型,还包括:非国密证书类型,
所述步骤W1中所述服务器根据预设选择证书条件选择证书类型之后,还包括:
当所述服务器选择的所述证书类型为所述非国密证书类型时,将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述步骤W2还包括,当所述上层应用获取到所述非国密证书类型信息时,所述上层应用根据注册到所述浏览器的证书存储区中的非国密证书类型证书获取非国密签名数据,向所述服务器返回所述非国密签名数据。
26.根据权利要求24所述的方法,其特征在于,所述步骤W11具体包括:
步骤X1:所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体;
步骤X2:所述上层应用调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
27.一种定位国密证书的装置,其特征在于,所述装置包括:
第一判断模块,用于当中间件的第一函数获取到当前容器参数时,根据当前容器参数判断获取到的当前容器名是否为空,如果是,则触发第一获取模块;否则,触发第二获取模块;
所述第一获取模块,用于获取中间件私有CSP句柄,触发第一输出模块;
所述第一输出模块,用于输出中间件私有CSP句柄和成功标识;
所述第二获取模块,用于根据当前容器名获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,触发第二判断模块;
所述第二判断模块,用于判断是否定位到当前设备,如果是,则触发第三获取模块;否则,触发第二输出模块;
所述第三获取模块,用于根据所述当前设备设置当前设备容器私有CSP句柄,触发第三输出模块;
所述第二输出模块,用于输出失败标识;
所述第三输出模块,用于输出所述当前设备容器私有CSP句柄和成功标识;
第三判断模块,用于当中间件的第二函数获取到中间件私有CSP句柄和当前枚举参数时,判断获取到的当前枚举参数的类型,若所述当前枚举参数的类型是枚举容器参数类型,触发第四获取模块;
所述第四获取模块,用于获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的当前容器名,触发第四判断模块;
所述第四判断模块,用于判断所述当前容器名是否存在,如果是,则触发第四输出模块;否则,触发第五输出模块;
所述第四输出模块,用于输出所述当前容器名和成功标识;
所述第五输出模块,用于输出失败标识;
第五判断模块,用于当中间件的第三函数获取到当前设备容器私有CSP句柄和国密算法标识时,判断获取到的当前设备容器私有CSP句柄和国密算法标识是否合法,如果是,则触发第五获取模块;否则,触发第六输出模块;
所述第五获取模块,用于根据所述当前设备容器私有CSP句柄和所述国密算法标识,查找当前设备的容器名为所述当前容器名的容器获取国密用法密钥,触发第六判断模块;
所述第六判断模块,用于判断是否获取到所述国密用法密钥,如果是,则触发第六获取模块;否则,触发第六输出模块;
所述第六获取模块,用于将预设国密用法密钥句柄作为国密算法密钥句柄,触发第七输出模块;
所述第六输出模块,用于输出失败标识;
所述第七输出模块,用于输出所述国密算法密钥句柄和成功标识;
第七判断模块,用于当中间件的第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,判断获取到的当前设备容器私有CSP句柄和国密算法密钥句柄是否合法,如果是,则触发第七获取模块;否则,触发第八输出模块;
所述第七获取模块,用于根据所述当前设备容器私有CSP句柄和所述国密算法密钥句柄查找到当前设备中的容器名为所述当前容器名的容器,获取容器中的国密证书数据,触发第八判断模块;
所述第八判断模块判断是否读取到合法的国密证书数据,如果是,则触发第九输出模块;否则触发第八输出模块;
所述第九输出模块,用于输出所述国密证书数据和返回成功标识;
所述第八输出模块,用于输出失败标识。
28.根据权利要求27所述的装置,其特征在于,所述第二获取模块包括第一获取单元、第二获取单元和第三获取单元;
所述第二判断模块,包括第一判断单元、第二判断单元、第三判断单元和第四判断单元;
所述第一获取单元,用于根据所述当前容器名获取所述设备名和所述设备容器名,判断所述设备名是否不为空,如果是,则触发所述第二获取单元;否则,触发所述第三获取单元;
所述第二获取单元,用于获取和所述设备名相匹配的智能密钥设备,触发所述第一判断单元;
所述第一判断单元,用于查找和所述设备名相匹配的智能密钥设备中是否存在和所述设备容器名相匹配的容器,如果是,则将和所述设备名相匹配的智能密钥设备作为所述当前设备,保存当前设备ID,触发所述第三获取模块;否则,触发所述第二输出模块;
所述第三获取单元,用于根据所述设备容器名获取和所述设备容器名相匹配的智能密钥设备,触发所述第二判断单元;
所述第二判断单元,用于判断是否存在和所述设备容器名相匹配的智能密钥设备,如果是,则触发所述第三判断单元;否则,触发所述第二输出模块;
所述第三判断单元,用于判断是否查找到唯一和所述设备容器名相匹配的智能密钥设备,如果是,则将唯一和所述设备容器名相匹配的智能密钥设备作为所述当前设备,保存当前设备ID,触发所述第三获取模块;否则,触发所述第四判断单元;
所述第四判断单元,用于判断是否需要输出提示选择智能密钥设备信息,如果需要输出提示选择智能密钥设备信息,则输出提示选择智能密钥设备信息,当获取到外部选择的智能密钥设备时,将所述外部选择的智能密钥设备作为所述当前设备,保存当前设备ID,触发所述第三获取模块;如果不需要输出提示选择智能密钥设备信息,则将查找到的第一个和所述设备容器名相匹配的智能密钥设备作为所述当前设备,保存当前设备ID,触发所述第三获取模块;
所述第三获取模块,具体用于根据所述当前设备设置所述当前设备容器私有CSP句柄,触发所述第三输出模块;
所述第二输出模块,具体用于输出失败标识;
所述第三输出模块,用于输出所述当前设备容器私有CSP句柄和成功标识。
29.根据权利要求27所述的装置,其特征在于,所述当前枚举参数的类型,还包括:枚举算法参数类型;
所述第三判断模块,还用于当所述当前枚举参数的类型是所述枚举算法参数类型时,触发第八获取模块;
所述第八获取模块,用于获取所述中间件的预设算法列表中的当前算法标识,触发第九判断模块;
所述第九判断模块,用于判断当前算法标识是否存在,如果是,则触发第十输出模块;否则,触发所述第五输出模块;
所述第十输出模块,用于输出当前算法标识和成功标识。
30.根据权利要求29所述的装置,其特征在于,所述枚举算法参数类型包括第一枚举算法参数和第二枚举算法参数;
所述第八获取模块,包括第四获取单元和第五获取单元;
所述第九判断模块,包括第五判断单元和第六判断单元;
所述第八获取模块,具体用于当所述枚举算法参数类型是所述第一枚举算法参数时,触发所述第四获取单元;当所述枚举算法参数类型是所述第二枚举算法参数时,触发所述第五获取单元;
所述第四获取单元,用于获取所述中间件的预设算法列表中的第一算法标识,触发所述第五判断单元;
所述第五判断单元,用于判断所述第一算法标识是否存在,如果是,则将所述第一算法标识作为当前算法标识,触发所述第十输出模块;否则,触发所述第五输出模块;
所述第五获取单元,用于获取所述中间件的预设算法列表中的当前算法标识的下一个算法标识,触发所述第六判断单元;
所述第六判断单元,用于判断所述当前算法标识的下一个算法标识是否存在,如果是,则将所述当前算法标识的下一个算法标识作为当前算法标识,触发所述第十输出模块;否则,触发所述第五输出模块。
31.根据权利要求27所述的装置,其特征在于,所述枚举容器参数类型包括第一枚举容器参数和第二枚举容器参数;
所述第四获取模块,包括第六获取单元和第七获取单元;
所述第四判断模块,包括第七判断单元和第八判断单元;
所述第四获取模块,具体用于当所述枚举容器参数类型是所述第一枚举容器参数时,触发所述第六获取单元;当所述枚举容器参数类型是所述第二枚举容器参数时,触发所述第七获取单元;
所述第六获取单元,用于获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的第一容器名,触发所述第七判断单元;
所述第七判断单元,用于判断所述第一容器名是否存在,如果是,则将所述第一容器名作为当前容器名,触发所述第四输出模块;否则,触发第五输出模块;
所述第七获取单元,用于获取所述容器名列表中的当前容器名的下一个容器名,触发所述第八判断单元;
所述第八判断单元,用于判断所述当前容器名的下一个容器名是否存在,如果是,则将所述当前容器名的下一个容器名作为当前容器名,触发所述第四输出模块;否则,触发第五输出模块。
32.根据权利要求27所述的装置,其特征在于,所述国密算法标识包括:国密签名算法标识;
所述第五获取模块,具体用于根据所述当前设备容器私有CSP句柄和所述国密签名算法标识,查找当前设备中的容器名为所述当前容器名的容器中获取国密签名算法密钥,触发所述第六判断模块;
所述第六判断模块,具体用于判断是否获取到国密签名算法密钥,如果是,则触发所述第六获取模块;否则,触发所述第六输出模块;
所述第六获取模块,具体用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发所述第七输出模块。
33.根据权利要求32所述的装置,其特征在于,还包括
第十判断模块,用于当中间件的第五函数获取到当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识时,判断获取到的当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识是否合法,如果是,则触发第九获取模块;否则,触发第十二输出模块;
所述第九获取模块,用于初始化一个哈希对象实例,将哈希对象实例的地址作为哈希句柄,触发第十一输出模块;
所述第十一输出模块,用于输出所述哈希句柄和成功标识;
所述第十二输出模块,用于输出失败标识;
第十一判断模块,用于当中间件的第六函数获取到当前设备容器私有CSP句柄、国密算法密钥句柄和摘要算法标识时,判断获取到的当前设备容器私有CSP句柄、哈希句柄和待签数据是否合法,如果是,则触发第十获取模块;否则,触发第十三输出模块;
所述第十获取模块,用于用所述哈希句柄对所述待签数据做摘要,获取摘要值并保存所述待签数据,触发第十四输出模块;
所述第十三输出模块,用于输出失败标识;
所述第十四输出模块,用于输出成功标识;
第十二判断模块,用于当中间件的第七函数获取到当前设备容器私有CSP句柄、哈希句柄和国密签名算法标识时,判断获取到的当前设备容器私有CSP句柄、哈希句柄和国密签名算法标识是否合法,如果是,则触发第十一获取模块;否则,触发第十五输出模块;
所述第十一获取模块,用于获取国密签名数据,触发第十六输出模块;
所述第十五输出模块,用于输出国密签名数据和失败标识;
所述第十六输出模块,用于输出成功标识。
34.根据权利要求32所述的装置,其特征在于,所述国密算法标识还包括:国密交换算法标识。
35.一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备,当所述中间件的注册证书模块检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,
所述服务器包括:
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
所述服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
所述服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;
所述服务器第二获取模块,用于根据所述用户信息获取私有CSP名和认证信息,触发服务器第一发送模块;
所述服务器第一发送模块,用于将预设国密证书类型标识、所述私有CSP名、所述认证信息和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
所述上层应用包括:
上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一获取模块;
上层应用第一获取模块,用于当获取到国密证书类型信息时,所述上层应用调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给所述中间件的第一函数,获取中间件私有CSP句柄,触发上层应用第二获取模块;
所述上层应用第二获取模块,用于设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和所述当前枚举参数传递给中间件的第二函数,获取容器名列表中的第一容器名,触发上层应用第一判断模块;
所述上层应用第一判断模块,用于判断是否获取到第一容器名,如果是,则将所述第一容器名作为当前容器名,触发上层应用第三获取模块;否则,触发上层应用报错模块;
所述上层应用报错模块,用于报错退出;
所述上层应用第三获取模块,用于调用主机操作系统的第一接口函数根据所述中间件私有CSP句柄,将所述当前容器名作为当前容器参数传递给所述中间件的所述第一函数,获取当前设备容器私有CSP句柄,触发上层应用第二判断模块;
所述上层应用第二判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第四获取模块;否则,触发所述上层应用报错模块;
所述上层应用第四获取模块,用于调用主机操作系统的第三接口函数将所述当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数获取当前设备的容器名为所述当前容器名的容器中的国密算法密钥句柄,触发上层应用第三判断模块;
所述上层应用第三判断模块,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第五获取模块;否则,触发所述上层应用报错模块;
所述上层应用第五获取模块,用于调用主机操作系统的第四接口函数将所述当前设备容器私有CSP句柄和所述国密算法密钥句柄传递给所述中间件的第四函数获取当前设备的容器名为所述当前容器名的容器中的国密证书数据,触发上层应用第四判断模块;
所述上层应用第四判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第六获取模块;否则,触发所述上层应用报错模块;
所述上层应用第六获取模块,用于根据所述国密证书数据获取国密证书认证信息,触发上层应用第五判断模块;
所述上层应用第五判断模块,用于判断所述国密证书认证信息是否和所述认证信息相匹配,如果是,则触发上层应用第七获取模块;否则,释放所述当前设备容器私有CSP句柄,触发上层应用第八获取模块;
所述上层应用第七获取模块,用于获取国密签名数据,触发上层应用第一返回模块;
所述上层应用第一返回模块,用于向服务器返回国密签名数据;
所述上层应用第八获取模块,用于设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和所述当前枚举参数传递给中间件的第二函数,获取所述容器名列表中的当前容器名的下一个容器名,触发上层应用第六判断模块;
所述上层应用第六判断模块,用于判断是否获取到当前容器名的下一个容器名,如果是,则将所述当前容器名的下一个容器名作为当前容器名,触发所述上层应用第三获取模块,否则,触发上层应用报错模块。
36.根据权利要求35所述的系统,其特征在于,所述证书类型,还包括:非国密证书类型,
所述服务器第二判断模块,还用于当服务器选择的证书类型为非国密证书类型时,触发所述服务器第二发送模块;
所述服务器还包括:
服务器第二发送模块,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述上层应用还包括;
所述上层应用第二接收模块,用于接收非国密证书类型信息,触发上层应用第九获取模块;
上层应用第九获取模块,用于根据注册到浏览器的证书存储区中的所述非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块;
所述上层应用第二返回模块,用于向所述服务器返回所述非国密签名数据。
37.根据权利要求35所述的系统,其特征在于,所述上层应用第六获取模块,包括:上层应用第一获取单元和所述上层应用第二获取单元;
所述上层应用第一获取单元,用于调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
所述上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
38.根据权利要求35所述的系统,其特征在于,所述上层应用还包括:
上层应用第十获取模块,用于当所述上层应用第一获取模块获取中间件私有CSP句柄之后,触发所述上层应用第二获取模块之前,设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数,获取所述中间件的预设算法列表中的第一算法标识,触发上层应用第七判断模块;
所述上层应用第七判断模块,用于判断是否获取到第一算法标识,如果是,则将所述第一算法标识作为当前算法标识,触发上层应用第十一获取模块;否则,触发所述上层应用报错模块;
所述上层应用第十一获取模块,用于设置所述当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数将所述中间件私有CSP句柄和所述当前枚举参数传递给所述中间件的第二函数获取所述中间件的所述预设算法列表中的当前算法标识的下一算法标识,触发上层应用第八判断模块;
所述上层应用第八判断模块,用于判断是否获取到当前算法标识的下一算法标识,如果是,则将所述当前算法标识的下一算法标识作为当前算法标识,触发所述上层应用第十一获取模块;否则,触发上层应用第九判断模块;
所述上层应用第九判断模块,用于根据获取到的全部算法标识判断所述中间件是否支持国密算法,如果是,则触发所述上层应用第二获取模块;否则触发所述上层应用报错模块。
39.根据权利要求38所述的系统,其特征在于,所述上层应用第九判断模块,具体用于查找获取到的全部算法标识中是否存在国密签名算法标识,如果是,则判断所述中间件支持国密算法,则触发所述上层应用第二获取模块;否则,判断所述中间件不支持国密算法,触发所述上层应用报错模块。
40.根据权利要求35所述的系统,其特征在于,所述上层应用第七获取模块,包括:
上层应用第三获取单元,用于调用主机操作系统的第五接口函数,将所述当前设备容器私有CSP句柄、所述国密算法密钥句柄和预设摘要算法标识传递给所述中间件的第五函数,获取哈希句柄,触发上层应用第四获取单元;
所述上层应用第四获取单元,用于调用主机操作系统的第六接口函数,将所述当前设备容器私有CSP句柄、所述哈希句柄和所述待签数据传递给所述中间件的第六函数,获取摘要值,触发上层应用第五获取单元;
所述上层应用第五获取单元,用于调用主机操作系统的第七接口函数,将所述当前设备容器私有CSP句柄、所述哈希句柄和预设国密签名算法标识传递给所述中间件的第七函数,获取国密签名数据,触发所述上层应用第一返回模块。
41.一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备,当所述中间件的注册证书模块检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,所述系统包括:
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
所述服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
所述服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;
所述服务器第二获取模块,用于根据所述用户信息获取私有CSP名和认证信息,触发服务器第一发送模块;
所述服务器第一发送模块,用于将预设国密证书类型标识、所述私有CSP名、所述认证信息和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一发送模块;
所述上层应用第一发送模块,用于当获取到国密证书类型信息时,调用主机操作系统的第一接口函数根据私有CSP名将预设容器名作为当前容器参数传递给所述中间件的第一函数,触发中间件第一获取模块;
所述中间件第一获取模块,用于当所述中间件的所述第一函数获取到的当前容器参数为预设容器名时,根据预设容器名设置中间件私有CSP句柄,触发中间件第一输出模块,
所述中间件第一输出模块,用于输出中间件私有CSP句柄和成功标识,触发上层应用第二发送模块;
所述上层应用第二发送模块,用于设置当前枚举参数为第一枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数,触发中间件第二获取模块;
所述中间件第二获取模块,用于当所述中间件的所述第二函数获取到中间件私有CSP句柄和第一枚举容器参数时,获取与主机连接的智能密钥设备的容器名列表,获取所述容器名列表中的第一容器名,触发中间件第一判断模块;
所述中间件第一判断模块,用于判断所述第一容器名是否存在,如果是,则将所述第一容器名作为当前容器名,触发中间件第二输出模块;否则,触发中间件第三输出模块;
所述中间件第二输出模块,用于输出所述当前容器名和成功标识,触发上层应用第一判断模块;
所述中间件第三输出模块,用于输出失败标识,触发上层应用第一判断模块;
所述上层应用第一判断模块,用于判断是否获取到当前容器名,如果是,则触发上层应用第三发送模块;否则,触发上层应用报错模块;
所述上层应用报错模块,用于报错退出;
所述上层应用第三发送模块,用于调用主机操作系统的所述第一接口函数根据中间件私有CSP句柄,将当前容器名作为当前容器参数传递给中间件的第一函数,触发中间件第三获取模块;
所述中间件第三获取模块,用于当所述中间件的所述第一函数获取到当前容器名时,解析所述当前容器名,获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,触发中间件第二判断模块;
所述中间件第二判断模块,用于判断是否定位到当前设备,如果是,则触发中间件第四获取模块;否则,触发中间件第四输出模块;
所述中间件第四获取模块,用于根据所述当前设备设置当前设备容器私有CSP句柄,触发中间件第五输出模块;
所述中间件第五输出模块,用于输出所述当前设备容器私有CSP句柄和成功标识,触发上层应用第二判断模块;
所述中间件第四输出模块,用于输出失败标识,触发上层应用第二判断模块;
所述上层应用第二判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第四发送模块;否则,触发所述上层应用报错模块;
所述上层应用第四发送模块,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数,触发所述中间件第五获取模块;
所述中间件第五获取模块,用于当所述中间件的所述第三函数获取到当前设备容器私有CSP句柄和预设国密算法标识时,根据所述当前设备容器私有CSP句柄和所述国密算法标识,查找当前设备的容器名为所述当前容器名的容器获取国密签名算法密钥,触发中间件第三判断模块;
所述中间件第三判断模块,用于判断是否获取到国密签名算法密钥,如果是,则触发中间件第六获取模块;否则,触发中间件第七输出模块;
所述中间件第六获取模块,用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发中间件第六输出模块;
所述中间件第六输出模块,用于输出所述国密算法密钥句柄和成功标识,触发上层应用第三判断模块;
所述中间件第七输出模块,用于输出失败标识,触发上层应用第三判断模块;
所述上层应用第三判断模块,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第五发送模块;否则,触发所述上层应用报错模块;
所述上层应用第五发送模块,用于调用主机操作系统的第四接口函数将当前设备容器私有CSP句柄和国密算法密钥句柄传递给所述中间件的第四函数,触发中间件第七获取模块;
所述中间件第七获取模块,用于当所述中间件的第四函数获取到当前设备容器私有CSP句柄和国密算法密钥句柄时,根据当前设备容器私有CSP句柄和国密算法密钥句柄获取国密证书数据,触发中间件第四判断模块;
所述中间件第四判断模块,用于判断是否读取到合法的国密证书数据,如果是,则触发中间件第八输出模块;否则,触发中间件第九输出模块;
所述中间件第九输出模块,用于输出失败标识,触发上层应用第四判断模块;
所述中间件第八输出模块,用于输出所述国密证书数据和成功标识,触发上层应用第四判断模块;
所述上层应用第四判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第一获取模块,否则,触发所述上层应用报错模块;
所述上层应用第一获取模块,用于根据国密证书数据获取国密证书认证信息,触发上层应用第五判断模块;
所述上层应用第五判断模块,用于判断国密证书认证信息是否和认证信息相匹配,如果是,则触发上层应用第二获取模块,否则,释放所述当前设备容器私有CSP句柄,触发上层应用第六发送模块;
所述上层应用第二获取模块,用于获取国密签名数据,触发上层应用第一返回模块;
所述上层应用第一返回模块,用于向服务器返回所述国密签名数据;
所述上层应用第六发送模块,用于设置当前枚举参数为第二枚举容器参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和所述当前枚举参数传递所述中间件的所述第二函数,触发中间件第八获取模块;
所述中间件第八获取模块,用于当所述中间件的所述第二函数获取到中间件私有CSP句柄和第二枚举容器参数时,获取当前容器名的下一个容器名,触发中间件第五判断模块;
所述中间件第五判断模块,用于判断所述当前容器名的下一个容器名是否存在,如果是,则将当前容器名的下一个容器名作为当前容器名,触发所述中间件第二输出模块;否则,触发所述中间件第三输出模块。
42.根据权利要求41所述的系统,其特征在于,所述证书类型,还包括:非国密证书类型,
所述服务器第二判断模块,还用于当服务器选择的证书类型为非国密证书类型时,触发所述服务器第二发送模块;
所述服务器还包括:
服务器第二发送模块,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述上层应用还包括;
所述上层应用第二接收模块,用于接收非国密证书类型信息,触发上层应用第三获取模块;
上层应用第三获取模块,用于根据注册到浏览器的证书存储区中的所述非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块;
所述上层应用第二返回模块,用于向所述服务器返回所述非国密签名数据。
43.根据权利要求41所述的系统,其特征在于,所述上层应用第一获取模块包括:
上层应用第一获取单元,用于所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
所述上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
44.根据权利要求41所述的系统,其特征在于,所述系统还包括:
上层应用第七发送模块,用于当中间件第一输出模块,输出中间件私有CSP句柄和成功标识之后,触发上层应用第二发送模块之前,设置当前枚举参数为第一枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数传递给所述中间件的第二函数,触发中间件第九获取模块;
所述中间件第九获取模块,用于当所述中间件的所述第二函数获取到中间件私有CSP句柄和第一枚举算法参数时,获取所述中间件的预设算法列表中的第一算法标识,触发中间件第六判断模块;
所述中间件第六判断模块,用于判断所述第一算法标识是否存在,如果是,则将所述第一算法标识作为当前算法标识,触发中间件第十输出模块;否则,触发中间件第十一输出模块;
所述中间件第十输出模块,用于输出所述当前算法标识和成功标识,触发上层应用第六判断模块;
所述中间件第十一输出模块,用于输出失败标识,触发上层应用第六判断模块;
所述上层应用第六判断模块,用于判断是否获取到当前算法标识,如果是,则触发上层应用第八发送模块;否则,触发所述上层应用报错模块;
所述上层应用第八发送模块,用于设置所述当前枚举参数为第二枚举算法参数,调用主机操作系统的第二接口函数将中间件私有CSP句柄和当前枚举参数类型传递给所述中间件的第二函数,触发中间件第十获取模块;
所述中间件第十获取模块,用于当所述中间件的所述第二函数获取到中间件私有CSP句柄和第二枚举算法参数时,获取所述中间件的预设算法列表中的当前算法标识的下一个算法标识,触发中间件第七判断模块;
所述中间件第七判断模块,用于判断所述当前算法标识的下一个算法标识是否存在,如果是,则将所述当前算法标识的下一个算法标识作为当前算法标识,触发所述中间件第十二输出模块;否则,触发所述中间件第十三输出模块;
所述中间件第十二输出模块,用于输出所述当前算法标识和成功标识,触发上层应用第七判断模块;
所述中间件第十三输出模块,用于输出失败标识,触发上层应用第七判断模块;
所述上层应用第七判断模块,用于判断是否获取到当前算法标识,如果是,则触发上层应用第八发送模块;否则,触发上层应用第八判断模块;
所述上层应用第八判断模块,用于根据获取到的全部算法标识判断所述中间件是否支持国密算法,如果是,则触发所述上层应用第二发送模块;否则,触发所述上层应用报错模块。
45.根据权利要求44所述的系统,其特征在于,所述上层应用第八判断模块,具体用于查找获取到的全部算法标识中是否存在预设国密签名算法标识,如果是,则判断所述中间件支持国密算法,则触发所述上层应用第二发送模块;否则,判断所述中间件不支持国密算法,则触发所述上层应用报错模块。
46.一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备,当所述中间件的注册证书模块检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,包括:
所述服务器包括:
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
所述服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
所述服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;
所述服务器第二获取模块,用于根据所述用户信息获取私有CSP名和认证信息和国密密钥容器名,触发服务器第一发送模块;
所述服务器第一发送模块,用于将预设国密证书类型标识、所述私有CSP名、所述认证信息、所述国密密钥容器名和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
所述上层应用包括:
上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一获取模块;
所述上层应用第一获取模块,用于调用主机操作系统的第一接口函数根据私有CSP名,将国密密钥容器名作为当前容器参数传递给所述中间件的第一函数,获取当前设备容器私有CSP句柄,触发上层应用第一判断模块;
所述上层应用第一判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第二获取模块;否则,触发上层应用报错模块;
所述上层应用报错模块,用于报错退出;
所述上层应用第二获取模块,用于调用主机操作系统的第三接口函数将所述当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数获取当前设备中的容器名为所述国密密钥容器名的容器中的国密算法密钥句柄,触发上层应用第二判断模块;
所述上层应用第二判断模块,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第三获取模块;否则,触发所述上层应用报错模块;
所述上层应用第三获取模块,用于调用主机操作系统的第四接口函数将所述当前设备容器私有CSP句柄和所述国密算法密钥句柄传递给所述中间件的第四函数获取当前设备中的容器名为所述国密密钥容器名的容器中的国密证书数据,触发上层应用第三判断模块;
所述上层应用第三判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第四获取模块;否则,触发所述上层应用报错模块;
所述上层应用第四获取模块,用于根据所述国密证书数据获取国密证书认证信息,触发上层应用第四判断模块;
所述上层应用第四判断模块,用于判断所述国密证书认证信息是否和所述认证信息相匹配,如果是,则触发上层应用第五获取模块;否则,触发所述上层应用报错模块;
所述上层应用第五获取模块,用于获取国密签名数据,触发所述上层应用第一返回模块;
所述上层应用第一返回模块,用于向服务器返回国密签名数据。
47.根据权利要求46所述的系统,其特征在于,所述证书类型,还包括:非国密证书类型,
所述服务器第二判断模块,还用于当服务器选择的证书类型为非国密证书类型时,触发所述服务器第二发送模块;
所述服务器还包括:
服务器第二发送模块,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述上层应用还包括;
所述上层应用第二接收模块,用于接收非国密证书类型信息,触发上层应用第六获取模块;
上层应用第六获取模块,用于根据注册到浏览器的证书存储区中的所述非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块;
所述上层应用第二返回模块向所述服务器返回所述非国密签名数据。
48.根据权利要求46所述的系统,其特征在于,所述上层应用第四获取模块,包括:
上层应用第一获取单元,用于所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
所述上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
49.根据权利要求46所述的系统,其特征在于,所述上层应用第五获取模块,包括:
上层应用第三获取单元,用于调用主机操作系统的第五接口函数,将所述当前设备容器私有CSP句柄、所述国密算法密钥句柄和预设摘要算法标识传递给所述中间件的第五函数,获取哈希句柄,触发上层应用第四获取单元;
所述上层应用第四获取单元,用于调用主机操作系统的第六接口函数,将所述当前设备容器私有CSP句柄、所述哈希句柄和所述待签数据传递给所述中间件的第六函数,获取摘要值,触发上层应用第五获取单元;
所述上层应用第五获取单元,用于调用主机操作系统的第七接口函数,将所述当前设备容器私有CSP句柄、所述哈希句柄和预设国密签名算法标识传递给所述中间件的第七函数,获取国密签名数据,触发所述上层应用第一返回模块。
50.一种定位国密证书的系统,包括服务器、安装有浏览器、上层应用、中间件的主机和智能密钥设备,当所述中间件的注册证书模块检测到智能密钥设备连接到主机时,获取智能密钥设备的设备信息和证书列表,遍历证书列表,判断当前证书的类型,如果当前证书类型是国密证书类型,则继续遍历;如果当前证书类型是非国密证书类型,则将非国密证书类型证书注册到浏览器的证书存储区中,继续遍历;当所有证书被遍历,则结束证书注册流程,其特征在于,所述系统包括:
服务器第一获取模块,用于获取用户通过单向SSL登录输入的用户信息,触发服务器第一判断模块;
所述服务器第一判断模块,用于判断用户信息是否合法,若获取到合法的用户信息,则触发服务器第二判断模块;
所述服务器第二判断模块,用于当获取到待签数据时,服务器根据预设选择证书条件选择证书类型,当服务器选择的证书类型为国密证书类型时,触发服务器第二获取模块;
所述服务器第二获取模块,用于根据所述用户信息获取私有CSP名和认证信息和国密密钥容器名,触发服务器第一发送模块;
所述服务器第一发送模块,用于将预设国密证书类型标识、所述私有CSP名、所述认证信息、所述国密密钥容器名和所述待签数据作为国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的国密签名数据;
所述上层应用第一接收模块,用于接收国密证书类型信息,触发上层应用第一发送模块;
所述上层应用第一发送模块,用于调用主机操作系统的第一接口函数根据私有CSP名,将国密密钥容器名作为当前容器参数传递给中间件的第一函数触发中间件第一获取模块;
所述中间件第一获取模块,用于当所述中间件的所述第一函数获取到国密密钥容器名时,根据所述国密密钥容器名获取设备名和设备容器名,根据所述设备名和所述设备容器名定位当前设备,触发中间件第一判断模块;
所述中间件第一判断模块,用于判断是否定位到当前设备,如果是,则触发中间件第二获取模块;否则,触发中间件第二输出模块;
所述中间件第二获取模块,用于根据所述当前设备设置当前设备容器私有CSP句柄,触发中间件第一输出模块;
所述中间件第一输出模块,用于输出所述当前设备容器私有CSP句柄和成功标识,触发上层应用第一判断模块;
所述中间件第二输出模块,用于输出失败标识,触发上层应用第一判断模块;
所述上层应用第一判断模块,用于判断是否获取到当前设备容器私有CSP句柄,如果是,则触发上层应用第二发送模块;否则,触发上层应用报错模块;
所述上层应用报错模块,用于报错退出;
所述上层应用第二发送模块,用于调用主机操作系统的第三接口函数将当前设备容器私有CSP句柄和预设国密签名算法标识传递给所述中间件的第三函数,触发中间件第三获取模块;
所述中间件第三获取模块,用于当所述中间件的所述第三函数获取到当前设备容器私有CSP句柄和预设国密签名算法标识时,根据当前设备容器私有CSP句柄和预设国密签名算法标识获取国密签名算法密钥,触发中间件第二判断模块;
所述中间件第二判断模块,用于判断是否获取到国密签名算法密钥,如果是,则触发中间件第四获取模块;否则,触发中间件第四输出模块;
所述中间件第四获取模块,用于将预设国密签名算法密钥句柄作为国密算法密钥句柄,触发中间件第三输出模块;
所述中间件第三输出模块,用于输出所述国密算法密钥句柄和成功标识,触发上层应用第二判断模块;
所述中间件第四输出模块,用于输出失败标识,触发上层应用第二判断模块;
所述上层应用第二判断模块,用于判断是否获取到国密算法密钥句柄,如果是,则触发上层应用第三发送模块;否则,触发所述上层应用报错模块;
所述上层应用第三发送模块,用于调用主机操作系统的第四接口函数将所述当前设备容器私有CSP句柄和所述国密算法密钥句柄传递给所述中间件的第四函数,触发中间件第五获取模块;
所述中间件第五获取模块,用于当所述中间件的所述第四函数获取到当前设备容器私有CSP句柄、国密算法密钥句柄时,获取国密证书数据,触发中间件第三判断模块;
所述中间件第三判断模块,用于判断是否读取到合法的国密证书数据,如果是,则触发中间件第四输出模块;否则,触发中间件第五输出模块;
所述中间件第四输出模块,用于输出国密证书数据和成功标识,触发上层应用第三判断模块;
所述中间件第五输出模块,用于输出失败标识,触发上层应用第三判断模块;
所述上层应用第三判断模块,用于判断是否获取到国密证书数据,如果是,则触发上层应用第一获取模块;否则,触发所述上层应用报错模块;
所述上层应用第一获取模块,用于根据所述国密证书数据获取国密证书认证信息,触发上层应用第四判断模块;
所述上层应用第四判断模块,用于判断所述国密证书认证信息是否和所述认证信息相匹配,如果是,则触发上层应用第二获取模块;否则,触发所述上层应用报错模块;
所述上层应用第二获取模块,用于获取国密签名数据,触发上层应用第一返回模块;
上层应用第一返回模块,用于向服务器返回所述国密签名数据。
51.根据权利要求50所述的系统,其特征在于,所述证书类型,还包括:非国密证书类型,
所述服务器第二判断模块,还用于当服务器选择的证书类型为非国密证书类型时,触发所述服务器第二发送模块;
所述服务器还包括:
服务器第二发送模块,用于将预设非国密证书类型标识和待签数据作为非国密证书类型信息发送给所述上层应用,等待获取所述上层应用返回的非国密签名数据;
所述上层应用还包括;
所述上层应用第二接收模块,用于接收非国密证书类型信息;
上层应用第三获取模块,用于根据注册到浏览器的证书存储区中的所述非国密证书类型证书获取非国密签名数据,触发上层应用第二返回模块;
所述上层应用第二返回模块向所述服务器返回所述非国密签名数据。
52.根据权利要求50所述的系统,其特征在于,所述上层应用第一获取模块,包括:
上层应用第一获取单元,用于所述上层应用调用主机操作系统的解析证书函数根据所述国密证书数据获取国密上下文结构体,触发上层应用第二获取单元;
所述上层应用第二获取单元,用于调用主机操作系统的证书名转换格式函数,根据所述国密证书上下文结构体获取所述国密证书认证信息。
CN201410840381.4A 2014-12-30 2014-12-30 一种定位国密证书的方法和装置及系统 Active CN104539429B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410840381.4A CN104539429B (zh) 2014-12-30 2014-12-30 一种定位国密证书的方法和装置及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410840381.4A CN104539429B (zh) 2014-12-30 2014-12-30 一种定位国密证书的方法和装置及系统

Publications (2)

Publication Number Publication Date
CN104539429A CN104539429A (zh) 2015-04-22
CN104539429B true CN104539429B (zh) 2017-09-22

Family

ID=52854900

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410840381.4A Active CN104539429B (zh) 2014-12-30 2014-12-30 一种定位国密证书的方法和装置及系统

Country Status (1)

Country Link
CN (1) CN104539429B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106101056B (zh) * 2016-05-12 2018-10-26 山东渔翁信息技术股份有限公司 一种代理软件软件架构中数据处理方法及让ie浏览器基于国密ssl协议通信的方法
CN107147497B (zh) * 2017-05-02 2018-07-06 北京海泰方圆科技股份有限公司 信息处理方法和装置
CN109274731B (zh) * 2018-09-04 2020-07-31 京东数字科技控股有限公司 基于多租户技术的web服务的部署、调用方法和装置
CN113420310B (zh) * 2021-07-01 2022-05-17 上海交通大学 Android应用中的国密算法检测方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103020530A (zh) * 2012-11-23 2013-04-03 山东电力集团公司 一种基于嵌入式平台sm2加密算法的优化方法
CN103338215A (zh) * 2013-07-26 2013-10-02 中金金融认证中心有限公司 基于国密算法建立tls通道的方法
CN103544011A (zh) * 2013-10-21 2014-01-29 飞天诚信科技股份有限公司 一种动态创建并使用功能对象的方法
CN103780376A (zh) * 2012-10-26 2014-05-07 中国银联股份有限公司 密码算法体系自适应切换的方法、终端以及安全载体
EP2744145A1 (en) * 2012-12-14 2014-06-18 Gemalto SA Non alterable structure including cryptographic material

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103780376A (zh) * 2012-10-26 2014-05-07 中国银联股份有限公司 密码算法体系自适应切换的方法、终端以及安全载体
CN103020530A (zh) * 2012-11-23 2013-04-03 山东电力集团公司 一种基于嵌入式平台sm2加密算法的优化方法
EP2744145A1 (en) * 2012-12-14 2014-06-18 Gemalto SA Non alterable structure including cryptographic material
CN103338215A (zh) * 2013-07-26 2013-10-02 中金金融认证中心有限公司 基于国密算法建立tls通道的方法
CN103544011A (zh) * 2013-10-21 2014-01-29 飞天诚信科技股份有限公司 一种动态创建并使用功能对象的方法

Also Published As

Publication number Publication date
CN104539429A (zh) 2015-04-22

Similar Documents

Publication Publication Date Title
CN104539429B (zh) 一种定位国密证书的方法和装置及系统
CN100533456C (zh) 安全代码生成方法和使用方法及用于其的可编程设备
CN101414909B (zh) 网络应用用户身份验证系统、方法和移动通信终端
CN101291224B (zh) 在通信系统中处理数据的方法和系统
US5636280A (en) Dual key reflexive encryption security system
CN102075327B (zh) 一种实现电子钥匙解锁的方法、装置及系统
CN104283886B (zh) 一种基于智能终端本地认证的web安全访问的实现方法
CN104283688B (zh) 一种USBKey安全认证系统及安全认证方法
JPH07503347A (ja) 相互接続された回線間で伝達される情報のデジタル化方法,および装置
CN107423964A (zh) 一种网上支付方法、装置及系统
CN105141420B (zh) 一种安全导入、签发证书的方法、设备及服务器
BRPI0722174B1 (pt) método e sistema para autenticar usuários em um sistema de processamento de dados
CN101388774A (zh) 一种在不同系统间自动认证识别用户身份并且登录的方法
CN100589390C (zh) 一种认证方法和认证系统
CN107294916A (zh) 单点登录方法、单点登录终端及单点登录系统
CN107248075A (zh) 一种实现智能密钥设备双向认证和交易的方法及装置
CN102064944A (zh) 一种安全发卡方法、发卡设备和系统
CN107172041A (zh) 一种免注册门禁及智能锁登记、解锁方法、装置、系统
CN100499451C (zh) 网络通信安全处理器及其数据处理方法
CN108256309A (zh) 硬件登录windows10以上系统的实现方法及装置
CN108270791A (zh) 一种安全运行可执行文件的方法及系统
CN108900309A (zh) 一种鉴权方法及鉴权系统
US8176533B1 (en) Complementary client and user authentication scheme
CN104994107B (zh) 一种基于iec62351的mms报文离线分析方法
CN110176989A (zh) 基于非对称密钥池的量子通信服务站身份认证方法和系统

Legal Events

Date Code Title Description
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant