将配置文件用于OpenSSL的EVP API

时间:2019-07-26 15:05:00

标签: go openssl openssl-engine

背景

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

更大的上下文是我正在使用Go wrapper around EVP,它既不全局设置引擎,也不设置用于签名/验证的引擎(我关心的唯一操作)。我正在研究涉及代码更改的选项(例如,使用cgo到set the engine globally或派生库),但是如果可以避免,那将是理想的选择。

问题

EVP似乎没有读取配置文件,因此我无法在线查找/理解有关是否可能的文档。配置文件是自动加载的(我只是做错了吗?)还是需要执行类似调用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

1 个答案:

答案 0 :(得分:0)

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

    OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL);