如何在我的应用程序中忽略 OPENSSL_ENGINES 环境变量?

How to ignore an OPENSSL_ENGINES environment variable in my app?

我在我的 C++ 应用程序中使用 openssl 库。我发现了如何忽略 OPENSSL_CONF 环境变量。可以通过指定我自己的配置文件来实现:

OPENSSL_config("openssl.cnf");

但是 OPENSSL_ENGINES 环境变量呢?在我的应用程序中如何忽略它的价值?如何防止从该路径加载引擎?

我查看了 openssl 来源。默认情况下有OPENSSL_ENGINES变量读取,没有任何条件。

...
if ((load_dir = getenv("OPENSSL_ENGINES")) == 0)
    load_dir = ENGINESDIR;
...

OpenSSL 似乎没有公开忽略该环境变量的正确方法。作为解决方法,您可以在调用 ENGINE_by_id() 之前自行将该环境变量设置为某个虚假值,如下所示:

putenv("OPENSSL_ENGINES=/dev/null");

您必须小心一点,您选择的虚假值不会碰巧作为文件系统上的有效路径存在。 /dev/null 可能是一个选项,具体取决于您的环境。