一种自动向应用程序加载pkcs#11模块的方法及装置的制造方法_2

文档序号:9887423阅读:来源:国知局
否则执行步骤S4;
[0037]具体地,步骤S3可以具体包括:根据安全模块数据库已加载模块列表的指针依次访问安全模块数据库已加载模块列表的每个结点,直至当前访问的结点的数据域中的数据元素为所述PKCS#11模块的模块名,或者当前访问的结点的指针域为空;若当前访问的结点的数据域中的数据元素为所述PKCS#11模块的模块名,则安全模块数据库已加载模块列表中包含所述PKCS#11模块的模块名,所述PKCS#11模块已加载,结束;若当前访问的结点的指针域为空则安全模块数据库已加载模块列表中不包含所述PKCS#11模块的模块名,执行步骤S4。
[0038]步骤S4、更新安全模块数据库已加载模块列表,向安全模块数据库已加载模块列表中写入所述PKCS#11模块的模块名和绝对目录;
[0039]步骤S5、保存更新后的安全模块数据库已加载模块列表。
[0040]实施例2
[0041]本实施例提供一种自动向应用程序加载PKCS#11模块的方法,所述方法通过运行可执行文件实现,如图2所示,所述方法包括:
[0042]步骤101、获取应用程序的安装目录;
[0043 ]进一步地,步骤1I具体包括:识别当前操作系统,获取应用程序在当前操作系统下的默认安装目录;
[0044]例如,Mozilla Firefox在Linux操作系统下的默认安装目录为/user/1 ib/firefox,在Mac OS操作系统下的默认安装目录为/Applicat1ns/;Mozilla Thunderbird在Iinux操作系统下的默认安装目录为/usr/lib/thunderbird,在Mac OS操作系统下的默认安装目录为/Applicat1ns/Thunderbird.app。
[0045]或者,步骤101具体包括:获取用户输入的应用程序的安装目录。
[0046]步骤102、打开应用程序安装目录下的nss3动态库,获取nss3动态库的句柄;
[0047]步骤103、判断是否成功获取到nss3动态库的句柄,是则执行步骤104,否则加载失败,执行步骤114;
[0048]进一步地,步骤102至步骤103具体包括:
[0049]步骤bl、以应用程序安装目录下的nss3动态库的绝对目录和预设打开方式为参数,调用系统函数d I op en,接收系统函数d I op en的返回值;
[0050]例如,应用程序的安装目录为/user/1 ib/firef ox,应用程序安装目录下的nss3动态库的名称为libnss3.so,贝ljnss3动态库的绝对目录为/user/1 ib/firef ox/1 ibnss3.so;[0051 ] 本实施例中,预设打开方式为RTLD_N0W。
[0052]步骤b2、判断系统函数dlopen的返回值是否为NULL,是则未成功获取到nss3动态库的句柄,加载失败,执行步骤114,否则成功获取到ns s3动态库的句柄,系统函数dl open的返回值即为nss3动态库的句柄,执行步骤104。
[0053]步骤104、根据nss3动态库的句柄分别获取nss3动态库的初始化函数、获取已加载模块列表函数、增加新模块函数和关闭函数的函数指针;
[0054]具体地,步骤104包括:
[0055]以nss3动态库的句柄以及初始化函数的函数符号为参数,调用系统函数dlsym获取初始化函数的函数指针;初始化函数的函数符号具体为NSS_Initialize;
[0056]以nss3动态库的句柄以及获取已加载模块列表函数的函数符号为参数,调用系统函数dlsym获取已加载模块列表函数的函数指针;获取已加载模块列表函数的函数符号具体为 SECMOD_GetDefaultModuleList ;
[0057]以nss3动态库的句柄以及增加新模块函数的函数符号为参数,调用系统函数dI sym获取增加新模块函数的函数指针;增加新模块函数的函数符号具体为SECM0D_AddNewModule;
[0058]以nss3动态库的句柄以及关闭函数的函数符号为参数,调用系统函数dlsym获取关闭函数的函数指针;关闭函数的函数符号具体为NSS_Shutdown。
[0059]步骤105、获取应用程序的缓存目录;
[0060]具体地,步骤105包括:
[0061]步骤Cl、获取应用程序配置文件的存储目录,通过所述存储目录访问应用程序配置文件,读取所述应用程序配置文件中的路径项;
[0062]进一步地,获取应用程序配置文件的存储目录可具体包括:识别当前操作系统,获取应用程序在当前操作系统下其配置文件的默认存储目录;
[0063]步骤c2、根据所述存储目录和所述路径项组合得到应用程序的缓存目录。
[0064]本实施例中,应用程序配置文件具体为profiles.1ni,应用程序配置文件的路径项具体为prof iIes.1ni的Path项;
[0065]例如,Mozilla Firefox的prof iIes.1ni文件在Linux操作系统下的默认存储目录为:用户目录/.Mozilla/f irefox,在Mac OS操作系统下的默认存储目录为:用户目录/Library/Applicat1n Support/Fi refox; Moz ilia Thunderbird 的profiles.1ni 文件在Linux操作系统下的默认存储目录为:用户目录/.thunderbird,在Mac OS操作系统下的默认存储目录为:用户目录/Library/Thunderbird;
[0066]若应用程序配置文件的默认存储目录为:用户目录/.moziIla/f irefox,应用程序配置文件的路径项为st j60m3k.default-1427959545304,则应用程序的缓存目录为:用户目录/.moziIla/firefox/stj60m3k.default-1427959545304。
[0067]步骤106、以应用程序缓存目录和安全模块数据库的名称为参数,调用初始化函数打开应用程序的缓存目录下的安全模块数据库,生成安全模块数据库已加载模块列表;
[0068]本实施例中,安全模块数据库的名称为secmod.db;
[0069]进一步地,调用初始化函数时的参数还可以包括:证书数据库的前缀、密钥数据库的前缀和初始化方式标志;其中,证书数据库的前缀和密钥数据库的前缀均为NULL,初始化方式标志具体为整数O,表示初始化方式为全面初始化。
[0070]步骤107、根据初始化函数的返回值判断是否成功生成安全模块数据库已加载模块列表,是则执行步骤108,否则加载失败,执行步骤114;
[0071]本实施例中,根据初始化函数的返回值判断是否成功生成安全模块数据库已加载模块列表具体包括:判断初始化函数的返回值,若初始化函数的返回值为TRUE则成功生成安全模块数据库已加载模块列表,若初始化函数的返回值为FALSE则未成功生成安全模块数据库已加载模块列表。
[0072]步骤108、调用获取已加载模块列表函数获取安全模块数据库已加载模块列表的指针;
[0073]步骤109、判断是否获取到安全模块数据库已加载模块列表的指针,是则执行步骤110,否则加载失败,执行步骤114;
[0074]本实施例中,判断是否获取到安全模块数据库已加载模块列表的指针具体包括:判断获取已加载模块列表函数的返回值是否为NULL,是则未获取到安全模块数据库已加载模块列表的指针,否则获取到安全模块数据库已加载模块列表的指针,获取已加载模块列表函数的返回值即为安全模块数据库已加载模块列表的指针。
[0075]步骤110、根据安全模块数据库已加载模块列表的指针访问安全模块数据库已加载模块列表的首个结点;
[0076]具体地,本实施例中,安全模块数据库已加载模块列表具体为链表,安全模块数据库已加载模块列表的指针指向安全模块数据库已加载模块列表的首个结点。
[0077]步骤111、判断当前访问的结点的数据域中存储的数据元素是否为所述PKCS#11模块的模块名,是则所述PKCS#11模块已加载,执行步骤114,否则执行步骤112;
[0078]步骤112、判断当前访问的结点的指针域是否为空,是则执行步骤113,否则根据当前访问的结点的指针域中的下一结
当前第2页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1