我遇到静态链接的openSSL库和GOST加密引擎的问题。
我有使用GOST密钥和证书的简单客户端/服务器应用程序。 它可以与GOST键一起使用,但前提是我使用动态链接版本的openSSL库。 如果我尝试使用静态链接的openSSL,我收到了一条错误消息。
这是openSSL库初始化调用:
OPENSSL_config(“正确的配置文件路径”);
SSL_library_init();
SSL_load_error_strings();
当我尝试读取证书文件时出现错误。
SSL_CTX_use_certificate_chain_file(ctx,CERTFILE)
这里的返回值不是1.所以这是一个错误。
人类可读的错误消息是:
3084809868:错误:0609E09C:数字信封 例程:PKEY_SET_TYPE:不支持的算法:p_lib.c:239: 3084809868:错误:0B07706F:x509证书 例程:X509_PUBKEY_get:不支持的算法:x_pubkey.c:155: 3084809868:错误:140BF10C:SSL例程:SSL_SET_CERT:x509 LIB:ssl_rsa.c:402:
当我使用与动态链接的openSSL库相同的代码与外部GOST引擎库时,一切正常。 那么静态版和动态版之间有什么区别? 我此时唯一的想法是我的库初始化序列是错误的。
我检查了编译过的libcrypto.a库中的符号。
nm ./libcrypto.a | grep gost
这个命令给了我带有许多GOST函数的输出,这些函数包含在libcrypto.a库中。 所以我认为库已经正确编译,并且所有GOST引擎函数都包含在静态库中。
“不支持的算法”错误消息表示GOST功能未正确初始化。 问题是:如何使用静态链接的openSSL正确初始化引擎?
答案 0 :(得分:4)
使用GOST引擎和静态链接openssl的正确解决方案是:
确保openssl.cnf存在于默认目录中。 (如果我们像这样配置我们的库“./config -prefix = / gost-ssl-static”,默认配置库将是/ gost-ssl-static / ssl)(有关详细信息,请参阅http://www.cryptocom.ru/opensource/openssl100.html) 确保openssl.cnf在带有方括号的第一部分之前包含以下行:
[openssl_def]
engines=engine_section
[engine_section]
gost=gost_section
[gost_section]
engine_id=gost
default_algorithms=ALL
CRYPT_PARAMS=id-Gost28147-89-CryptoPro-A-ParamSet
初始化openSSL库和gost引擎:
OPENSSL_config(NULL);
SSL_library_init();
SSL_load_error_strings();
我的错误是OpenSSL初始化不正确。 我的初始化代码要复杂得多。 许多不必要的函数调用相互干扰,并且初始化了gost引擎。 另外我认为OPENSSL_config(NULL)函数中唯一的参数意味着openssl.cnf文件的路径。 这是错误的建议。