我正在尝试配置 OpenSSL,以便我设备上的所有 OpenSSL 应用程序都使用自定义引擎。我的 openssl.cnf 文件中有以下内容:
config_diagnostics = 1
openssl_conf = openssl_def
[ openssl_def ]
engines = engine_section
[ engine_section ]
symcrypt = symcrypt_section
[ symcrypt_section ]
engine_id = symcrypt
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/libsymcryptengine.so
default_algorithms = ALL
init = 1
这适用于 OpenSSL 应用程序(例如运行时openssl s_client -tls1_3 -connect google.com:443
)和 Nginx。但是,它不适用于其他一些应用程序。例如,我在这里复制了代码,它使用 EVP API 使用 AES-CBC 进行简单的对称加密和解密。我的引擎支持 AES-CBC,所以这应该可以工作。但是当我构建这个应用程序(使用gcc -o main main.c -lcrypto -lssl
)并运行它时,我的引擎没有被调用甚至加载。为什么不?有什么办法可以强制所有调用 OpenSSL的人在不修改 OpenSSL 代码的情况下使用我的引擎?(或者至少所有动态链接 OpenSSL 并且没有明确指定自己的引擎的调用者?)