首页> 中国专利> 向应用程序中自动导入数字证书的方法及装置

向应用程序中自动导入数字证书的方法及装置

摘要

本发明公开了一种向应用程序中自动导入数字证书的方法及装置,涉及信息安全领域。所述装置包括:获取文件模块,用于根据证书文件名获取证书文件;获取证书模块,用于获取所述获取文件模块获取到的证书文件中的数字证书;获取槽模块,用于获取可以操作应用程序的槽;第一导入模块,用于对所述获取证书模块获取到的数字证书进行解码,通过所述获取槽模块获取到的槽将解码得到的数据导入到所述应用程序以完成所述数字证书的导入,并根据导入的数字证书的类型设置导入的数字证书的证书信任方式。本发明的有益效果在于采用本发明提供的技术方案向应用程序中自动导入数字证书,不仅可以省去用户手动操作的麻烦,还能够提高数字证书的导入效率。

著录项

  • 公开/公告号CN105721162A

    专利类型发明专利

  • 公开/公告日2016-06-29

    原文格式PDF

  • 申请/专利权人 飞天诚信科技股份有限公司;

    申请/专利号CN201610067808.0

  • 发明设计人 陆舟;于华章;

    申请日2016-01-30

  • 分类号H04L9/32;

  • 代理机构

  • 代理人

  • 地址 100085 北京市海淀区学清路9号汇智大厦B楼17层

  • 入库时间 2023-12-18 15:54:16

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-05

    授权

    授权

  • 2016-07-27

    实质审查的生效 IPC(主分类):H04L9/32 申请日:20160130

    实质审查的生效

  • 2016-06-29

    公开

    公开

说明书

技术领域

本发明涉及信息安全领域,尤其涉及一种向应用程序中自动导入数字证书 的方法及装置。

背景技术

数字证书是一个经证书授权中心数字签名的包含拥有者信息以及公开密钥 的文件,以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解 密、数字签名和签名验证,以确保网上传递信息的机密性、完整性及交易的不 可抵赖性。发明人在实现本发明的过程中发现,现有技术中存在以下缺陷:一 些应用程序(如Mozilla公司的MozillaFirefox和MozillaThunderbird)需要用户手 动导入数字证书和修改数字证书的信任方式,而且不同应用程序对应的操作方 法常常存在差异,操作起来不仅耗时长而且效率低。

发明内容

本发明的目的是克服现有技术的缺陷,提供一种向应用程序中自动导入数 字证书的方法及装置。

一方面,本发明提供一种向应用程序中自动导入数字证书的方法,具体包 括:

步骤S1、根据证书文件名获取证书文件;

步骤S2、获取所述证书文件中的数字证书;

步骤S3、获取可以操作应用程序的槽,对所述数字证书进行解码,通过所 述槽将解码得到的数据导入到所述应用程序以完成所述数字证书的导入,根据 导入的数字证书的类型设置导入的数字证书的证书信任方式。

具体地,上述步骤S1具体包括:根据证书文件名打开证书文件,获取所述 证书文件的句柄,根据所述句柄获取所述证书文件。

进一步地,上述步骤S1中还包括:检查获取到的证书文件的格式,若为第 一预设证书格式则执行步骤S2,若为第二预设证书格式则执行以下步骤:

步骤S4、获取可以操作应用程序的槽;

步骤S5、依序获取证书文件中的每个数字证书,且每当获取到一个数字证 书时,对当前获取到的数字证书进行解码,通过所述槽将解码得到的数据导入 到应用程序以完成当前获取到的数字证书的导入,并根据当前导入的数字证书 的类型设置当前导入的数字证书的证书信任方式;

所述第一预设证书格式具体为cer证书格式或pfx证书格式或p12证书格式; 所述第二预设证书格式具体为p7b证书格式;

当所述第一预设证书格式具体为pfx证书格式或p12证书格式时,步骤S1 中还包括:添加密码校验算法,接收用户输入的证书密码,根据所述密码校验 算法校验所述证书密码,若校验通过则执行步骤S2,若校验未通过则结束。

具体地,步骤S5具体包括:

步骤1-1、获取证书文件中的数字证书的数量;

步骤1-2、从所述证书文件中获取一张未被导入应用程序的数字证书,解码 当前获取到的数字证书,通过所述可以操作应用程序的槽将解码得到的数据导 入到所述应用程序以完成当前获取到的数字证书的导入,根据当前导入的数字 证书的类型设置当前导入的数字证书的证书信任方式;

步骤1-3、根据所述证书文件中的数字证书的数量判断证书文件中是否还有 未被导入应用程序的数字证书,是则返回步骤1-2,否则结束。

步骤1-1具体包括:

步骤2-1、将证书文件写入pkcs7格式的结构体中;

步骤2-2、根据所述结构体中的type属性判断所述证书文件的签名格式,并 依据所述签名格式的类型根据所述结构体中的相应成员变量获取指向所述结构 体中的数字证书存储区域的指针;

步骤2-3、根据所述指针访问所述结构体中的数字证书存储区域,获取所述 存储区域中的数字证书的数量。

步骤2-2具体包括:根据所述结构体中的type属性判断所述证书文件的签 名格式,若为普通签名格式则根据所述结构体中的成员变量d.sign中的成员变量 cert获取指向所述结构体中的数字证书存储区域的指针;若为带信封的签名格式 则根据所述结构体中的成员变量d.signed_and_enveloped中的成员变量cert获取 指向所述结构体中的数字证书存储区域的指针。

所述获取可以操作应用程序的槽之前还包括:分配可以操作应用程序的槽。

所述解码得到的数据具体包括:证书序列号、证书主体名称、证书数据、 证书格式以及证书发行者名称。

所述根据导入的数字证书的类型设置导入的数字证书的信任方式,具体包 括:判断导入的数字证书的类型,若为CA证书则将导入的数字证书的证书信任 方式设置为第一预设方式,若为服务器证书则将导入的数字证书的证书信任方 式设置为第二预设方式。

所述判断导入的数字证书的类型具体包括:判断导入的数字证书中是否包 含证书基本约束属性,若包含则导入的数字证书为CA证书,若不包含则导入的 数字证书为服务器证书。

另一方面,本发明还提供一种向应用程序中自动导入数字证书的装置,具 体包括:

获取文件模块,用于根据证书文件名获取证书文件;

获取证书模块,用于获取所述获取文件模块获取到的证书文件中的数字证 书;

获取槽模块,用于获取可以操作应用程序的槽;

第一导入模块,用于对所述获取证书模块获取到的数字证书进行解码,通 过所述获取槽模块获取到的槽将解码得到的数据导入到所述应用程序以完成所 述数字证书的导入,并根据导入的数字证书的类型设置导入的数字证书的证书 信任方式。

所述获取文件模块具体用于:根据证书文件名打开证书文件,获取所述证 书文件的句柄,根据所述句柄获取所述证书文件。

所述装置还包括检查模块和第二导入模块;所述检查模块,用于检查所述 获取文件模块获取到的证书文件的格式;所述第二导入模块,用于当所述检查 模块的检查结果为第二预设证书格式时,依序获取所述获取文件模块获取到的 证书文件中的每个数字证书,且每当获取到一个数字证书时,对当前获取到的 数字证书进行解码,通过所述获取槽模块获取到的槽将解码得到的数据导入到 应用程序以完成当前获取到的数字证书的导入,并根据当前导入的数字证书的 类型设置当前导入的数字证书的证书信任方式;

所述第一导入模块具体用于:当所述检查模块的检查结果为第一预设证书 格式时,对所述获取证书模块获取到的数字证书进行解码,通过所述获取槽模 块获取到的槽将解码得到的数据导入到所述应用程序以完成所述数字证书的导 入,并根据导入的数字证书的类型设置导入的数字证书的证书信任方式。

所述第一导入模块具体用于:当所述检查模块的检查结果为cer证书格式或 pfx证书格式或p12证书格式时,对所述获取证书模块获取到的数字证书进行解 码,通过所述获取槽模块获取到的槽将解码得到的数据导入到所述应用程序以 完成所述数字证书的导入,并根据导入的数字证书的类型设置导入的数字证书 的证书信任方式;

所述第二导入模块,用于当所述检查模块的检查结果为p7b证书格式时, 依序获取证书文件中的每个数字证书,且每当获取到一个数字证书时,对当前 获取到的数字证书进行解码,通过所述获取槽模块获取到的槽将解码得到的数 据导入到应用程序以完成当前获取到的数字证书的导入,并根据当前导入的数 字证书的类型设置当前导入的数字证书的证书信任方式。

所述第一导入模块具体用于:当所述检查模块的检查结果为cer证书格式时 对所述获取证书模块获取到的数字证书进行解码,通过所述获取槽模块获取到 的槽将解码得到的数据导入到所述应用程序以完成所述数字证书的导入,并根 据导入的数字证书的类型设置导入的数字证书的证书信任方式;当所述检查模 块的检查结果为pfx证书格式或p12证书格式时,添加密码校验算法,接收用户 输入的证书密码,根据所述密码校验算法校验所述证书密码,以及在所述证书 密码校验通过时对所述获取证书模块获取到的数字证书进行解码,通过所述获 取槽模块获取到的槽将解码得到的数据导入到所述应用程序以完成所述数字证 书的导入,并根据导入的数字证书的类型设置导入的数字证书的证书信任方式。

所述第二导入模块具体包括:

获取子模块,用于当所述检查模块的检查结果为第二预设证书格式时,获 取所述获取文件模块获取到的证书文件中的数字证书的数量;

导入子模块,用于在所述获取文件模块获取到的证书文件中还有未被导入 应用程序的数字证书时,从所述证书文件中获取一张未被导入所述应用程序的 数字证书,对当前获取到的数字证书进行解码,通过所述获取槽模块获取到的 槽将解码得到的数据导入到所述应用程序,根据当前导入的数字证书的类型设 置当前导入的数字证书的证书信任方式;

判断子模块,用于根据所述获取子模块的获取结果判断所述获取文件模块 获取到的证书文件中是否还有未被导入应用程序的数字证书。

所述获取子模块具体包括:

写入单元,用于将所述获取文件模块获取到的证书文件写入pkcs7格式的结 构体中;

指针获取单元,用于根据pkcs7格式的结构体中的type属性判断证书文件的 格式类型,并依据证书文件的格式类型根据pkcs7格式的结构体中的相应成员变 量获取指向pkcs7格式的结构体中的数字证书存储区域的指针;

数量获取单元,用于根据所述指针获取单元获取到的指针访问pkcs7格式的 结构体中的数字证书存储区域,获取所述数字证书存储区域中的数字证书的数 量。

所述指针获取单元具体用于:根据pkcs7格式的结构体中的type属性判断数 字证书的签名格式,若为普通签名格式则根据pkcs7格式的结构体中的成员变量 d.sign中的成员变量cert获取指向pkcs7格式的结构体中的数字证书存储区域的 指针;若为带信封的签名格式则根据pkcs7格式的结构体中的成员变量 d.signed_and_enveloped中的成员变量cert获取指向pkcs7格式的结构体中的数字 证书存储区域的指针。

所述装置还包括:分配槽模块,用于分配所述可以操作应用程序的槽。

所述第一导入模块包括导入子模块:用于通过所述获取槽模块获取到的槽 将解码得到的证书序列号、证书主体名称、证书数据、证书格式和证书发行者 名称导入到所述应用程序。

所述第一导入模块包括设置子模块:用于判断导入的数字证书的类型,若 为CA证书则将导入的数字证书的信任方式设置为第一预设方式,若为服务器证 书则将导入的数字证书的证书信任方式设置为第二预设方式。

所述设置子模块包括判断单元:用于判断导入的数字证书中是否包含证书 基本约束属性,若包含则导入的数字证书为CA证书,若不包含则导入的数字证 书为服务器证书。

本发明的有益效果在于:用本发明提供的技术方案向应用程序中自动导入 数字证书,不仅可以省去用户手动操作的麻烦,还能够提高数字证书的导入效 率。

附图说明

为了更清楚的说明本发明实施例或现有技术中的技术方案,下面将对实施 例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述 中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例1提供的一种向应用程序中自动导入数字证书的方法 的流程图;

图2为图1中步骤109的一种具体实现的流程图;

图3为图2中步骤c1的一种具体实现的流程图;

图4为本发明实施例2提供的一种向应用程序中自动导入数字证书的装置 的方框图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳 动前提下所获得的所有其他实施例,都属于本发明保护的范围。

实施例1

本实施例提供一种向应用程序中自动导入数字证书的方法,如图1所示, 所述方法包括:

步骤101、根据证书文件名获取证书文件;

进一步地,步骤101具体包括:

步骤a1、根据证书文件名打开证书文件,获取证书文件的句柄;

更进一步地,步骤a1包括:调用系统函数open根据预设文件名以只读方式 打开证书文件,根据系统函数open的返回值得到证书文件的句柄;

步骤a2、根据所述句柄获取证书文件;

更进一步地,步骤a2可具体通过调用系统函数read实现。

步骤102、检查证书文件的格式,若为pfx证书格式或p12证书格式则执行 步骤103,若为cer证书格式则执行步骤105,若为p7b证书格式则执行步骤108;

进一步地,步骤102具体包括:检查证书文件的扩展名,若证书文件的扩 展名为pfx则证书文件为pfx证书格式,执行步骤103,若证书文件的扩展名为 p12则证书文件为p12证书格式,执行步骤103,若证书文件的扩展名为cer则 证书文件为cer证书格式,执行步骤105,若证书文件的扩展名为p7b则证书文 件为p7b证书格式,执行步骤108。

步骤103、添加密码校验算法,接收用户输入的证书密码;

进一步地,添加密码校验算法可具体通过调用OpenSSL函数 SSLeay_add_all_algorithms实现。

步骤104、根据密码校验算法校验证书密码,若校验通过则执行步骤105, 若校验未通过则结束;

进一步地,步骤104可具体通过调用OpenSSL函数PKCS12_parse实现。

步骤105、获取证书文件中的数字证书;

进一步地,步骤105可具体通过调用OpenSSL函数PEM_read_X509或 i2d_x509实现。

步骤106、获取可以操作应用程序的Slot(槽),对数字证书进行解码,通 过所述Slot将解码得到的数据导入到应用程序;

进一步地,获取可以操作应用程序的Slot具体包括:调用应用程序的安装 目录下的nss3动态库中的PK11_GetInternalKeySlot函数,根据 PK11_GetInternalKeySlot函数的返回值获取所述Slot的指针;相应地,获取可以 操作应用程序的Slot之前还包括分配可以操作应用程序的Slot,具体地,通过调 用应用程序的安装目录下的nss3动态库中的NSS_Initialize函数分配可以操作应用 程序的Slot;

对数字证书解码具体包括:调用应用程序的安装目录下的smile3动态库中 的CERT_DecodeCertFromPackage函数实现,根据CERT_DecodeCertFromPackage 函数的返回值获取指向解码得到的数据的缓存区域的指针;

解码得到的数据包括:证书序列号(CKA_SERIAL_NUMBER)、证书主体 名称(CKA_SUBJECT)、证书数据(CKA_VALUE)、证书格式(如X509格式 等)和证书发行者名称(CKA_ISSUER);

通过所述Slot将解码得到的数据导入到应用程序具体包括:根据所述可以 操作应用程序的Slot的指针调用应用程序的安装目录下的nss3动态库中的 PK11_ImportCert函数将解码得到的数据写入应用程序;

步骤107、根据导入的数字证书的类型设置导入的数字证书的证书信任方 式,结束;

进一步地,步骤107具体包括:判断导入的数字证书的类型,若为CA证书 则将导入的数字证书的证书信任方式设置为第一预设方式:

trust.sslFlags=CERTDB_TRUSTED_CA| CERTDB_TRUSTED_CLIENT_CA

trust.emailFlags=CERTDB_TRUSTED_CA| CERTDB_TRUSTED_CLIENT_CA

trust.objectSigningFlags=CERTDB_TRUSTED_CA| CERTDB_TRUSTED_CLIENT_CA

若为服务器证书则将导入的数字证书的证书信任方式设置为第二预设方 式:

trust.sslFlags=CERTDB_TRUSTED|CERTDB_TERMINAL_RECORD

更进一步地,判断导入的数字证书的类型可以具体包括:判断导入的数字 证书中是否包含证书基本约束属性,若包含则导入的数字证书具体为CA证书, 若不包含则导入的数字证书具体为服务器证书;

证书基本约束属性具体为NID_basic_constraints;判断导入的数字证书中是 否包含证书基本约束属性具体包括:根据预设值调用OpenSSL函数 X509_get_ext_by_nid,判断X509_get_ext_by_nid的返回值是否为所述预设值,若 X509_get_ext_by_nid的返回值为所述预设值,则证书中不包含证书基本约束属 性,若X509_get_ext_by_nid的返回值不为所述预设值,则证书中包含证书基本 约束属性;

设置数字证书的信任方式可具体通过调用应用程序的安装目录下的nss3动 态库中的CERT_ChangeCertTrus函数实现。

步骤108、获取可以操作应用程序的Slot;

进一步地,步骤108具体包括:调用应用程序的安装目录下的nss3动态库 中的PK11_GetInternalKeySlot函数,根据PK11_GetInternalKeySlot函数的返回值 获取所述Slot的指针;

相应地,获取可以操作应用程序的Slot之前还包括分配可以操作应用程序 的Slot,具体地,通过调用应用程序的安装目录下的nss3动态库中的NSS_Initialize 函数分配可以操作应用程序的Slot。

步骤109、依序获取证书文件中的每个数字证书,每当获取到一个数字证书 时,对当前获取到的数字证书进行解码,通过所述Slot将解码得到的数据导入 到应用程序,并根据当前获取到的数字证书的类型设置当前导入的数字证书的 证书信任方式,结束。

具体地,解码得到的数据包括:证书序列号(CKA_SERIAL_NUMBER)、 证书主体名称(CKA_SUBJECT)、证书数据(CKA_VALUE)、证书格式(如X509 格式等)和证书发行者名称(CKA_ISSUER)。

进一步地,如图2所示,步骤109具体包括:

步骤c1、获取证书文件中的数字证书的数量;

更进一步地,如图3所示,步骤c1具体包括:

步骤i、将证书文件写入pkcs7格式的结构体中;

具体地,步骤i可以通过调用OpenSSL函数d2i_PKCS7实现;

步骤ii、根据结构体中的type属性判断证书文件的签名格式,若为普通的签 名格式则执行步骤iii;若为带信封的签名格式则执行步骤iv;

具体地,步骤ii可以包括:以结构体中的type属性为参数,调用OpenSSL 函数OBJ_obj2nid,根据OBJ_obj2nid的返回值判断证书文件的签名格式,若 OBJ_obj2nid的返回值为NID_pkcs7_signed则证书文件的签名格式为普通签名格 式,执行步骤iii,若OBJ_obj2nid的返回值为NID_pkcs7_signedAndEnveloped则 证书文件的签名格式为带信封的签名格式,执行步骤iv;

步骤iii、根据结构体中的成员变量d.sign中的成员变量cert获取指向结构体 中的数字证书存储区域的指针,执行步骤v;

步骤iv、根据结构体中的成员变量d.signed_and_enveloped中的成员变量cert 获取指向结构体中的数字证书存储区域的指针,执行步骤v;

步骤v、根据所述指向结构体中的数字证书存储区域的指针访问结构体中的 数字证书存储区域,获取数字证书存储区域中的数字证书的数量;

具体地,步骤v可以具体包括:以所述指向结构体中的数字证书存储区域 的指针为参数,调用OpenSSL函数sk_x509_num,根据sk_x509_num的返回值 获取数字证书存储区域中的数字证书的数量。

步骤c2、从证书文件中获取一张尚未被导入应用程序的数字证书;

更进一步地,步骤c2具体包括:以所述指向结构体中的数字证书存储区域 的指针为参数,调用OpenSSL函数sk_X509_value获取数字证书存储区域中的第 n张证书,1≤n≤数字证书存储区中的数字证书的数量;

步骤c3、对当前获取到的数字证书进行解码;

步骤c4、通过所述可以操作应用程序的Slot将当前解码得到的数据导入应 用程序;

更进一步地,步骤c4具体包括:根据所述可以操作应用程序的Slot的指针 调用应用程序的安装目录下的nss3动态库中的PK11_ImportCert函数将解码得到 的数据导入应用程序;

步骤c5、根据当前导入的数字证书的类型设置当前导入的数字证书的证书 信任方式;

更进一步地,步骤c5具体包括:判断当前导入的数字证书的类型,若为CA 证书则将当前导入的数字证书的证书信任方式设置为第一预设信任方式:

trust.sslFlags=CERTDB_TRUSTED_CA| CERTDB_TRUSTED_CLIENT_CA

trust.emailFlags=CERTDB_TRUSTED_CA| CERTDB_TRUSTED_CLIENT_CA

trust.objectSigningFlags=CERTDB_TRUSTED_CA| CERTDB_TRUSTED_CLIENT_CA

若为服务器证书则将当前导入的数字证书的证书信任方式设置为第二预设 信任方式:

trust.sslFlags=CERTDB_TRUSTED|CERTDB_TERMINAL_RECORD

更进一步地,判断当前导入的数字证书的类型具体包括:判断当前导入的 数字证书中是否包含证书基本约束属性,若当前导入的数字证书中包含证书基 本约束属性,则当前导入的数字证书具体为CA证书,若当前导入的数字证书中 不包含证书基本约束属性,则当前导入的数字证书具体为服务器证书;

证书基本约束属性具体为NID_basic_constraints;判断当前导入的数字证书 中是否包含证书基本约束属性具体包括:根据预设值调用OpenSSL函数 X509_get_ext_by_nid,判断X509_get_ext_by_nid的返回值是否为所述预设值,若 X509_get_ext_by_nid的返回值为所述预设值,则当前导入的数字证书中不包含证 书基本约束属性,若X509_get_ext_by_nid的返回值不为所述预设值,则当前导 入的数字证书中包含证书基本约束属性;

设置数字证书的信任方式可具体通过调用应用程序的安装目录下的nss3动 态库中的CERT_ChangeCertTrus函数实现。

步骤c6、根据证书文件中的数字证书的数量判断证书文件中是否还有未被 导入应用程序的数字证书,是则返回步骤c2,否则结束。

实施例2

如图4所示,本实施例提供一种向应用程序中自动导入数字证书的装置, 所述装置包括获取文件模块21、获取证书模块22、获取槽模块23和第一导入模 块24。

具体地,上述各模块的具体功能如下:

获取文件模块21,用于根据证书文件名获取证书文件;

获取证书模块22,用于获取所述获取文件模块21获取到的证书文件中的数 字证书;

获取槽模块23,用于获取可以操作应用程序的槽;

第一导入模块24,用于对所述获取证书模块22获取到的数字证书进行解码, 通过所述获取槽模块23获取到的槽将解码得到的数据导入到所述应用程序以完 成所述数字证书的导入,并根据导入的数字证书的类型设置导入的数字证书的 证书信任方式。

进一步地,获取文件模块21可以具体用于:根据证书文件名打开证书文件, 获取所述证书文件的句柄,根据所述句柄获取所述证书文件。

进一步地,本实施例提供的装置中还包括检查模块25和第二导入模块26, 其中:

检查模块25,用于检查所述获取文件模块21获取到的证书文件的格式;

第二导入模块26,用于当所述检查模块25的检查结果为第二预设证书格式 时,依序获取所述获取证书文件模块21获取到的证书文件中的每个数字证书, 且每当获取到一个数字证书时,对当前获取到的数字证书进行解码,通过所述 获取槽模块23获取到的槽将解码得到的数据导入到应用程序以完成当前获取到 的数字证书的导入,并根据当前导入的数字证书的类型设置当前导入的数字证 书的证书信任方式;

相应地,第一导入模块24具体用于:当所述检查模块25的检查结果为第一 预设证书格式时,对所述获取证书模块22获取到的数字证书进行解码,通过所 述获取槽模块23获取到的槽将解码得到的数据导入到所述应用程序以完成所述 数字证书的导入,并根据导入的数字证书的类型设置导入的数字证书的证书信 任方式;

更进一步地,第一预设证书格式包括cer、pfx和p12等证书格式;第二预 设证书格式包括p7b等证书格式,相应地:

第一导入模块24具体用于:当所述检查模块25的检查结果为cer证书格式 时对所述获取证书模块22获取到的数字证书进行解码,通过所述获取槽模块23 获取到的槽将解码得到的数据导入到所述应用程序以完成所述数字证书的导 入,并根据导入的数字证书的类型设置导入的数字证书的证书信任方式;当所 述检查模块25的检查结果为pfx证书格式或p12证书格式时,添加密码校验算 法,接收用户输入的证书密码,根据所述密码校验算法校验所述证书密码,若 校验通过则对所述获取证书模块22获取到的数字证书进行解码,通过所述获取 槽模块23获取到的槽将解码得到的数据导入到所述应用程序以完成所述数字证 书的导入,并根据导入的数字证书的类型设置导入的数字证书的证书信任方式, 若校验未通过则结束;

第二导入模块26具体包括获取子模块、导入子模块和判断子模块,各子模 块的功能如下:

获取子模块,用于当所述检查模块25的检查结果为第二预设证书格式时, 获取所述获取文件模块21获取到的证书文件中的数字证书的数量;

导入子模块,用于在所述获取文件模块21获取到的证书文件中还有未被导 入应用程序的数字证书时,从所述证书文件中获取一张尚未被导入所述应用程 序的数字证书,对当前获取到的数字证书进行解码,通过所述获取槽模块23获 取到的槽将解码得到的数据导入到所述应用程序,根据当前导入的数字证书的 类型设置当前导入的数字证书的证书信任方式;

判断子模块,用于根据所述获取子模块的获取结果判断所述获取文件模块 21获取到的证书文件中是否还有未被导入应用程序的数字证书;

具体地,上述获取子模块进一步包括写入单元、指针获取单元和数量获取 单元,各单元的功能如下:

写入单元,用于将所述获取文件模块21获取到的证书文件写入pkcs7格式 的结构体中;

指针获取单元,用于根据pkcs7格式的结构体中的type属性判断证书文件的 格式类型,并依据证书文件的格式类型根据pkcs7格式的结构体中的相应成员变 量获取指向pkcs7格式的结构体中的数字证书存储区域的指针;

数量获取单元,用于根据所述指针获取单元获取到的指针访问pkcs7格式的 结构体中的数字证书存储区域,获取所述数字证书存储区域中的数字证书的数 量;

进一步地,上述指针获取单元具体用于:根据pkcs7格式的结构体中的type 属性判断数字证书的签名格式,若为普通的签名格式则根据pkcs7格式的结构体 中的成员变量d.sign中的成员变量cert获取指向pkcs7格式的结构体中的数字证 书存储区域的指针;若为带信封的签名格式则根据pkcs7格式的结构体中的成员 变量d.signed_and_enveloped中的成员变量cert获取指向pkcs7格式的结构体中的 数字证书存储区域的指针。

本实施例提供的装置中还包括分配槽模块27,用于分配所述可以操作应用 程序的槽。

第一导入模块24中包括导入子模块,所述导入子模块具体用于通过所述获 取槽模块23获取到的槽将解码得到的证书序列号、证书主体名称、证书数据、 证书格式和证书发行者名称导入到所述应用程序。

第一导入模块24中包括设置子模块,所述设置子模块具体用于判断导入的 数字证书的类型,若为CA证书则将导入的数字证书的信任方式设置为第一预设 方式,若为服务器证书则将导入的数字证书的证书信任方式设置为第二预设方 式;

进一步地,设置子模块中包括判断单元,所述判断单元具体用于判断导入 的数字证书中是否包含证书基本约束属性,若包含则导入的数字证书为CA证 书,若不包含则导入的数字证书为服务器证书。

以上所述的实施例只是本发明较优选的具体实施方式,本领域的技术人员 在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围 内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号