点地址访问下一结点,返回步骤111;
[0079]步骤113、以所述PKCS#11模块的模块名和绝对目录为参数,调用增加新模块函数更新安全模块数据库已加载模块列表,将PKCS#11模块的模块名和绝对目录写入安全模块数据库已加载模块列表,保存更新后的安全模块数据库已加载模块列表,执行步骤114;
[0080]进一步地,调用增加新模块函数时的参数还可以包括:加密算法标识和加密启用标志;其中,加密算法标识和加密启用标志均为整数O,分别表示加密算法为默认加密算法和不启用加密。
[0081]步骤113中还包括:判断增加新模块函数的返回值,若增加新模块函数的返回值为TRUE则所述PKCS#11模块的模块名和绝对目录写入成功,若增加新模块函数的返回值为FALSE则所述PKCS#11模块的模块名和绝对目录写入失败,所述PKCS#11模块加载失败。
[0082]步骤114、调用关闭函数关闭安全模块数据库,结束。
[0083]本实施例中,具体根据初始化函数的函数指针调用初始化函数,根据获取已加载模块列表函数的函数指针调用获取已加载模块列表函数,根据增加新模块函数的函数指针调用增加新模块函数,根据关闭函数的函数指针调用关闭函数。
[0084]实施例3
[0085]本实施例提供一种自动向应用程序加载PKCS#11模块的装置,如图3所示,具体包括:
[0086]获取目录模块300,用于获取应用程序的缓存目录;
[0087]具体地,本实施例中,获取目录模块可以具体用于:获取应用程序配置文件的存储目录,通过所述存储目录访问应用程序配置文件,读取所述应用程序配置文件中的路径项,根据所述存储目录和所述路径项组合得到应用程序的缓存目录。
[0088]生成列表模块301,用于打开获取目录模块300获取到的应用程序的缓存目录下的安全模块数据库,生成安全模块数据库已加载模块列表;
[0089]具体地,本实施例中,生成列表模块301可以具体用于:根据安全模块数据库的名称和获取目录模块获取到的应用程序的缓存目录打开应用程序的安全模块数据库,生成安全模块数据库已加载模块列表;
[0090]获取列表指针模块302,用于获取生成列表模块301生成的安全模块数据库已加载丰吴块列表的指针;
[0091 ]判断模块303,用于根据获取列表指针模块302获取到的安全模块数据库已加载模块列表的指针访问生成列表模块301生成的安全模块数据库已加载模块列表,判断所述安全模块数据库已加载模块列表中是否包含所述PKCS#11模块的模块名;
[0092]具体地,本实施例中,判断模块303可以具体用于:根据获取列表指针模块302获取到的安全模块数据库已加载模块列表的指针一次访问安全模块数据库已加载模块列表的每个结点,直至当前访问的结点的数据域中的数据元素为所述PKCS#11模块的模块名,或者当前访问的结点的指针域为空;其中,若当前访问的结点的数据域中的数据元素为所述PKCS# 11模块的模块名则安全模块数据库已加载模块列表中包含所述PKCS#11模块的模块名,若当前访问的结点的指针域为空则安全模块数据库已加载模块列表中不包含所述PKCS#11模块的模块名。
[0093]加载模块304,用于当判断模块303判断所述安全模块数据库已加载模块列表中不包含所述PKCS#11模块的模块名时,更新生成列表模块301生成的安全模块数据库已加载模块列表,向所述安全模块数据库已加载模块列表中写入所述PKCS#11模块的模块名和绝对目录;
[0094]保存模块305,用于保存加载模块304更新后的安全模块数据库已加载模块列表。
[0095]实施例4
[0096]本实施例提供一种自动卸载PKCS#11模块的方法,所述方法通过运行可执行文件实现,具体包括:
[0097]步骤201、获取应用程序的安装目录;
[0098]进一步地,步骤201具体包括:识别当前操作系统,获取应用程序在当前操作系统下的默认安装目录;
[0099]例如,Mozilla Firefox在Linux操作系统下的默认安装目录为/user/1 ib/firefox,在Mac OS操作系统下的默认安装目录为/Applicat1ns/;Mozilla Thunderbird在Iinux操作系统下的默认安装目录为/usr/lib/thunderbird,在Mac OS操作系统下的默认安装目录为/Applicat1ns/Thunderbird.app。
[0100]或者,步骤201具体包括:获取用户输入的应用程序的安装目录。
[0101 ]步骤202、打开应用程序安装目录下的nss3动态库,获取nss3动态库的句柄;
[0102]步骤203、判断是否成功获取到nss3动态库的句柄,是则执行步骤204,否则卸载失败,执行步骤210;
[0103]进一步地,步骤202至步骤203具体包括:
[0104]步骤bl、以应用程序安装目录下的nss3动态库的绝对目录和预设打开方式为参数,调用系统函数d I op en,接收系统函数d I op en的返回值;
[0105]例如,应用程序的安装目录为/user/1 ib/f irefox,应用程序安装目录下的nss3动态库的名称为libnss3.so,贝ljnss3动态库的绝对目录为/user/1 ib/f irefox/1 ibnss3.so;
[0106]本实施例中,预设打开方式为RTLD_N0W。
[0107]步骤b2、判断系统函数dlopen的返回值是否为NULL,是则未成功获取到nss3动态库的句柄,卸载失败,执行步骤210,否则成功获取到ns s3动态库的句柄,系统函数dlopen的返回值即为nss3动态库的句柄,执行步骤204。
[0108]步骤204、根据nss3动态库的句柄分别获取nss3动态库的初始化函数、查找模块函数、删除模块函数和关闭函数的函数指针;
[0109]具体地,步骤204包括:
[0110]以nss3动态库的句柄以及初始化函数的函数符号为参数,调用系统函数dlsym获取初始化函数的函数指针;初始化函数的函数符号具体为NSS_Initialize;
[0111]以nss3动态库的句柄以及查找模块函数的函数符号为参数,调用系统函数dlsym获取查找模块函数的函数指针;查找模块函数的函数符号具体为SECM0D_FindModule;
[0112]以nss3动态库的句柄以及删除模块函数的函数符号为参数,调用系统函数dlsym获取删除模块函数的函数指针;删除模块函数的函数符号具体为SECM0D_DeleteMOdUle;
[0113]以nss3动态库的句柄以及关闭函数的函数符号为参数,调用系统函数dlsym获取关闭函数的函数指针;关闭函数的函数符号具体为NSS_Shutdown。
[0114]步骤205、获取应用程序的缓存目录;
[0115]具体地,步骤205包括:
[0116]步骤Cl、获取应用程序配置文件的存储目录,通过所述存储目录访问应用程序配置文件,读取所述应用程序配置文件中的路径项;
[0117]进一步地,获取应用程序配置文件的存储目录可具体包括:识别当前操作系统,获取应用程序在当前操作系统下其配置文件的默认存储目录;
[0118]步骤c2、根据所述存储目录和所述路径项组合得到应用程序的缓存目录。
[0119]本实施例中,应用程序配置文件具体为profiles.1ni,应用程序配置文件的路径项具体为prof iIes.1ni的Path项;
[0120]例如,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;
[0121 ] 若应用程序配置文件的默认存储目录为:用户目录/.mozilla/fi