OpenSSL 如何选择使用哪个 ENGINE?

问题描述

我有一个应用程序,它与 OpenSSL 1.0.2 和 TPM 硬件以及针对 RSA 的 OpenSSL ENGINE 实现动态链接。

我使用 OpenSSL 的 动态 ENGINE 来注册 TPM ENGINE。这是(简化的)代码的样子:

ENGINE_load_dynamic();
ENGINE *e = ENGINE_by_id("dynamic");

ENGINE_ctrl_cmd_string(e,"SO_PATH",path_to_libtpm,0);
ENGINE_ctrl_cmd_string(e,"ID","tpm2tss","LOAD",NULL,0);

ENGINE_init(e);

ENGINE_ctrl_cmd(e,...);
ENGINE_ctrl_cmd(e,...);

ENGINE_register_all_complete();

ENGINE_finish(e);
ENGINE_free(e);

根据 man page,由于我调用的是 ENGINE_register_all_complete() 而不是 ENGINE_set_default_RSA,因此我让 OpenSSL 决定使用哪种 RSA 实现。

下次 OpenSSL 尝试设置 RSA 密钥时,任何实现 RSA_METHOD 的捆绑引擎都将传递给 ENGINE_init(),如果其中任何一个成功,该引擎将被设置为 RSA 使用的默认值,从那时起

OpenSSL 是否会优先考虑已注册 ENGINE 中的 RSA 实现而不是它自己的实现?

如果注册了多个 ENGINE 来提供相同算法的实现,会发生什么? OpenSSL 会使用它能够初始化的第一个 ENGINE 吗?

如果没有调用 ENGINE_set_default_XXX,是否可以保证使用注册的 ENGINE?

解决方法

您可以通过 openssl.cnf 配置文件指定要使用的引擎 或者,您可以使用 -engine 参数在命令行上指定引擎。

从您的 C 代码中,您可以使用 ENGINE_by_id(engine_id);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...