OpenSSL和GOST引擎问题(静态链接)

时间:2012-06-09 09:15:11

标签: security openssl static-libraries x509certificate gost3410

我遇到静态链接的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正确初始化引擎?

1 个答案:

答案 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文件的路径。 这是错误的建议。