为 OpenSSL 的 EVP 使用配置文件 API

Using configuration file for OpenSSL's EVP API

背景

当通过命令行使用 OpenSSL 时,我可以通过设置 openssl.cnf 来更改默认引擎(参见下面的 示例代码 )。我现在想在使用 EVP API 时更改默认引擎,最好是更改配置文件。

更大的上下文是我正在使用 Go wrapper around EVP, which supports neither setting the engine globally nor setting the engine for signing/verifying (the only operations I care about). I am investigating options (e.g. using cgo to set the engine globally 或分叉库)涉及代码更改,但如果我能避免它们,那将是理想的。

问题

EVP 似乎无法读取配置文件,而且我无法 find/understand 在线文档了解这是否可行。配置文件是自动加载的(我只是做错了?)还是我需要做一些像调用 OPENSSL_INIT_LOAD_CONFIG?

示例代码

openssl_conf = openssl_def

[openssl_def]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/local/Cellar/engine_pkcs11/0.1.8/lib/engines/engine_pkcs11.so
MODULE_PATH = /usr/local/Cellar/opensc/0.19.0/lib/pkcs11/opensc-pkcs11.so
PIN = "123456"
init = 0
$ openssl engine
(rdrand) Intel RDRAND engine
(dynamic) Dynamic engine loading support
(pkcs11) pkcs11 engine

假设您使用的是 OpenSSL 1.1.0 或更高版本,然后尝试在程序的开头插入以下内容(在您执行任何其他 OpenSSL 调用之前):

    OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL);