openssl测试时指定engine加载目录

news/2025/1/11 10:53:15/

下面所分析的 openssl源码的版本是 tag: OpenSSL_1_1_1d

在调试 openssl的加解密引擎时,每次修改完相关代码后,都要重新编译和安装,但安装这一步比较费时。经过一番调研后,发现可以在测试时指定引擎的加载目录,不需要安装引擎相关的动态库。

openssl实现中,"dynamic"引擎是一个特殊的引擎,在测试时,openssl会先加载 "dynamic"引擎,然后由该引擎加载用户使用到的其他引擎。"dynamic"引擎通过 dlopen()加载动态库的形式来加载其他引擎,因此,在调用 dlopen()之前,"dynamic"引擎需要知道其他引擎的加载目录。

阅读源码可知,在 crypto/engine/eng_dyn.c文件中 struct st_dynamic_data_ctx结构体的 dirs成员存放了 "dynamic"引擎在加载其他引擎时所用到的查找目录,如下所示:

struct st_dynamic_data_ctx {/* The DSO object we load that supplies the ENGINE code */DSO *dynamic_dso;.../** Whether to never use 'dirs', use 'dirs' as a fallback, or only use* 'dirs' for loading. Default is to use 'dirs' as a fallback.*/int dir_load;/* A stack of directories from which ENGINEs could be loaded */STACK_OF(OPENSSL_STRING) *dirs;
}

同时,在 crypto/engine/eng_dyn.c文件中指定了 "dynamic"引擎所支持的命令,如下所示:

static const ENGINE_CMD_DEFN dynamic_cmd_defns[] = {
...{DYNAMIC_CMD_DIR_ADD,"DIR_ADD", "Adds a directory from which ENGINEs can be loaded",ENGINE_CMD_FLAG_STRING},
...
};

其中,"DIR_ADD"命令用来指定其他引擎的加载目录。

crypto/engine/eng_list.c文件的 ENGINE_by_id()中使用了 "DIR_ADD"命令,为 "dynamic"引擎添加了其他引擎的加载目录,如下所示:

ENGINE *ENGINE_by_id(const char *id)
{
...if (strcmp(id, "dynamic")) {if ((load_dir = ossl_safe_getenv("OPENSSL_ENGINES")) == NULL)load_dir = ENGINESDIR;iterator = ENGINE_by_id("dynamic");if (!iterator || !ENGINE_ctrl_cmd_string(iterator, "ID", id, 0) ||!ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) ||!ENGINE_ctrl_cmd_string(iterator, "DIR_ADD",load_dir, 0) ||!ENGINE_ctrl_cmd_string(iterator, "LIST_ADD", "1", 0) ||!ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0))goto notfound;return iterator;}
...
}

从上面可以看到,load_dir变量指定了"dynamic"引擎所用到的查找目录,它的取值有两种情况,首先读取环境变量 OPENSSL_ENGINES,如果读取成功,就使用该环境变量的值,如果没有读取成功,则使用的是 Makefile 中指定的引擎加载目录:ENGINESDIR,如下所示:

# Do not edit these manually. Use Configure with --prefix or --openssldir
# to change this!  Short explanation in the top comment in Configure
INSTALLTOP=/usr/local
OPENSSLDIR=/usr/local/ssl
LIBDIR=lib
# $(libdir) is chosen to be compatible with the GNU coding standards
libdir=$(INSTALLTOP)/$(LIBDIR)
ENGINESDIR=$(libdir)/engines-1.1

由上可知,如果没有指定环境变量 OPENSSL_ENGINES,则默认的引擎加载目录是:/usr/local/lib/engines-1.1

综上所述,在 openssl测试时可以通过设置 OPENSSL_ENGINES环境变量来指定引擎的加载目录。


http://www.ppmy.cn/news/488914.html

相关文章

邯郸网络服务器机柜型号,珠海服务器机柜批发

服务器机柜是网络机柜的一种类型,在多个行业中都有一定的应用,服务器机柜是一种需要长期运行的电子仪器,我们要怎样保障服务器机柜的正常运行呢?服务器能否稳定运行,涉及的原因很广,从电路板印刷的材质、驱动程序的兼容性、服务器机柜的散热设计等,都会…

天津网络服务器机柜型号,天津服务器机柜

其原理就是将数据导入,而不是依靠中断后机柜去进行工作。而中断后机柜将放在理想硬盘,不会空耗太多电力。而将同样可用的某些中断后硬盘直接出盘。 例如内存损坏,放在有人看到保护管,但中断后硬盘没有放到中断机柜上的信息信息&am…

网络服务器

务服器(Architecture)是网络服务器的简称。其功能包括服务器硬件、网络设备管理、服务器服务管理、网络技术服务、网络应用、服务器管理和服务器运维管理等。随着互联网数据量的快速增长,服务器承载的信息容量和处理速度都呈指数级增长,因此服务器也被称…

数据中心服务器机柜电气参数,数据中心服务器机柜选择指南

今天的数据中心,功率密度、设备分布密度与日俱增,威尔网络机柜、服务器机柜和机架在安装网络布线设施时,能提供安全地、全面地对至关重要的物理架构的保护 一、基于框架结构选择机柜 综合布线柜与 参数 服务器机柜 综合布线机柜 深度 950mm 600mm 深度扩展 1200mm 800mm 宽度…

服务器放在机柜哪个位置,服务器放在机柜

服务器放在机柜 内容精选 换一换 本场景一般采用均衡计算型服务器。具体的场景典型配置如下: DCC是物理隔离的专属计算资源集群,集群中主机可能会因为故障而自动停机。为降低物理机故障的影响,在用户购买的专属集群内资源有冗余的情况下&…

华为服务器机柜的型号,服务器机柜规格

服务器机柜规格 内容精选 换一换 当前市场上常见的手机模拟方案有x86模拟器方案和真手机方案,优劣对比如表1所示。 服务器机柜规格 相关内容 按需付费是后付费方式,可以随时开通/删除弹性云服务器,支持秒级计费,系统会根据云服务器…

用visio制作机柜服务器,ibm visio 服务器机柜图标

【实例简介】 ibm visio 服务器机柜图标 ibm全系列产品visio机柜图标 画机柜平面图的选择 【实例截图】 【核心代码】 af108d07-08fb-4638-bf08-372416c35cd2 └── IBM ├── IBM 1.vss ├── IBM 2.vss ├── IBM-3D.vss ├── IBM 3.vss ├── IBM 4.vss ├── IBM 5…

服务器放在机柜_服务器机柜安装步骤 服务器机柜安装注意事项

摘要:服务器机柜,用来组合安装面板、插件、插箱、电子元件、器件和机械零件与部件,使其构成一个整体的安装箱。服务器机柜由框架和盖板(门)组成,一般具有长方体的外形,落地放置。它为电子设备正常工作提供相适应的环境和安全防护。这是仅次于系统级的一级组装。 【机柜安装…